![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#91 |
Nhập môn đệ tử
Tham gia ngày: Sep 2007
Bài gửi: 8
: |
Bang chủ làm ơn cho hỏi: địa chỉ cổng b của 18f4550 là gì ?, mình tìm mãi không thấy nó ghi ở chỗ nào cả. Xin cảm ơn !!!
|
![]() |
![]() |
![]() |
#92 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#93 | |
Đệ tử 2 túi
Tham gia ngày: Jun 2006
Bài gửi: 27
: |
góp ý với bang chủ về mẫu chương trình
Trích:
theo tôi nên đặt các hàm con nằm giữa dòng lệnh goto $ và end mạn phép bang chủ có mấy lời góp ý ![]() |
|
![]() |
![]() |
![]() |
#94 | |
Trưởng lão PIC bang
|
Trích:
Do đó, mệnh đề "nếu không phải là vòng lặp vô hạn" của bạn chỉ có giá trị true khi chương trình cho PIC được viết tồi. Và cấu trúc của chương trình mẫu không có gì bất hợp lý. Lệnh goto $ ngay phía trước directive end của chương trình mẫu vốn là một lệnh thừa. Việc đặt các chương trình con ở đâu trong chương trình hợp ngữ vốn không quan trọng, trừ một số trường hợp liên quan đến kỹ thuật bảng. Lập trình cho PIC có một số điểm khác biệt so với lập trình cho PC, vì sự hạn chế tài nguyên cùng cấu trúc đặc biệt của PIC so với một máy vi tính (đa dụng). Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#95 | |
Đệ tử 2 túi
Tham gia ngày: Jun 2006
Bài gửi: 27
: |
Trích:
![]() Tuy nhiên, theo tôi lệnh goto $ chỉ thừa trong trường hợp này thôi (trong vi dụ mẫu) còn trong một số trg hợp khác bản thân nó là một "vòng lặp vô hạn không làm gì cả " (kiểu như: while(TRUE) {}; ) thì lại không thừa. Chẳng hạn một chương trình không làm gì cả mà chỉ khởi tạo các giá trị ban đầu rồi chờ các sự kiện ngắt để phục vụ thì không thể coi đó là một chương trình tồi và lẽ đương nhiên là cần phải có một lệnh goto $ để tạo ra vòng lặp vô hạn (tất nhiên mọi người có thể nói là không cần lệnh goto $ mà dùng lệnh loop goto loop ![]() Tất nhiên chương trình con thì đặt đâu mà chả được, nhưng đây là nói tới cái chương trình mẫu mà F tạo ra dành cho người mới học (như tôi chẳng hạn), cứ copy nguyên về, thay cái phần nội dung trong main và chương trình con cho phù hợp với bài toán của mình rồi biên dịch rồi chạy rồi thấy nó chạy loạn lên vì các lý do mà tôi đã đề cập ở bài trước. vì thế mới góp ý để F sửa đổi một chút chương trình mẫu để cho những người mới học khác có muốn copy về, xào xáo lại như tôi sẽ không bị nhầm lẫn nữa ![]() |
|
![]() |
![]() |
![]() |
#96 | |
Trưởng lão PIC bang
|
Trích:
Trong cấu trúc của chương trình mẫu, vòng lặp chính là vòng lặp giữa nhãn loop và lệnh goto loop. Nếu muốn biến nó thành while (true) {} thì không cần viết lệnh gì vào vòng lặp đó là xong. Do vậy, lệnh goto $ phía trước dẫn hướng end vẫn là thừa. Hơn nữa, viết theo kiểu loop goto loop hay goto $ đều dịch ra cùng kết quả. Cấu trúc của chương trình mẫu là ổn, đảm bảo không có chuyện "copy nguyên về, thay cái phần nội dung trong main và chương trình con cho phù hợp với bài toán của mình rồi biên dịch rồi chạy rồi thấy nó chạy loạn lên". Đề nghị bạn post những chương trình kiểu đó lên để minh họa cho lý luận của bạn. Về việc lệnh goto $ nằm trước dẫn hướng end: nó thừa nhưng chẳng ảnh hưởng gì đến chương trình ứng dụng (được viết đúng quy tắc) nên việc loại bỏ nó hay không vốn không phải là vấn đề. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#97 | |
Đệ tử 2 túi
Tham gia ngày: Jun 2006
Bài gửi: 27
: |
Trích:
Code:
;====================================== processor p16f84a include <p16f84a.inc> __config _cp_off & _wdt_off & _xt_osc ;====================================== org 0x0c count0 res 1 count1 res 1 count2 res 1 ;====================================== org 0x00 goto main org 0x05 ;------------------------------------------------- main banksel trisa clrf trisa movlw 0xff movwf trisb banksel porta clrf porta movlw 0x09 movwf count0 clrw btfsc portb, 0 iorlw b'00001' btfsc portb, 1 iorlw b'00010' btfsc portb, 2 iorlw b'00100' btfsc portb, 3 iorlw b'01000' btfsc portb, 4 iorlw b'10000' addwf count0, 1 delay0 call delay100m decfsz count0, f goto delay0 bsf porta, 0 ;------------------------------------------------- delay100m movlw 0x4e movwf count2 delay2 nop nop call delay1278 decfsz count2, f goto delay2 movlw 0xf0 movwf count2 delay3 nop decfsz count2, f goto delay3 return ;------------------------------------------------- delay1278 movlw 0xff movwf count1 delay1 nop nop decfsz count1, f goto delay1 return ;------------------------------------------------- goto $ end ;====================================== nhưng chuyển các chương trình con xuống giữa 2 dòng goto $ và end thì chạy đúng bây giờ quay trở lại chương trình mẫu: để như vậy đương nhiên vẫn chạy đúng chuyển các chương trình con xuống giữa 2 dòng goto $ và end vẫn chạy đúng lẽ đương nhiên quẳng các chương trình con ở đâu mà chẳng được, thế nhưng với tiêu chí "học pic trong một ngày" tức là dành cho người mới học thì mẫu càng tổng quát càng tốt đúng không, vậy thì tại sao lại không chỉnh sửa một chút (chẳng sai gì và chẳng thiệt hại gì) để chương trình mẫu có thể tránh thêm một lỗi có thể gặp trong thực tế. To Namqn: Từ đầu tôi vẫn nhất quán là chuyển chương trình con xuống thôi. còn những cái khác có thể là do cách diễn đạt làm bạn hiểu sai. Thế còn goto $ hay loop goto loop ai chả biết bản chất nó là một, ý tôi muốn nói ở đây là tôi thì thích dùng goto $ để làm vòng lặp while(TRUE); còn có thể ng khác lại thích dùng loop goto loop để làm vòng lặp while(TRUE); thay đổi nội dung bởi: namqn, 02-08-2008 lúc 06:37 PM. |
|
![]() |
![]() |
![]() |
#98 |
Trưởng lão PIC bang
|
Bạn đã phá vỡ cấu trúc của chương trình mẫu. Trong chương trình mẫu, phần code của chương trình chính bắt đầu với các lệnh khởi tạo ban đầu, sau đó đi vào vòng lặp chính, còn các chương trình con nằm dưới vòng lặp chính.
Bạn đã bỏ mất vòng lặp chính (loop ... goto loop), dẫn đến chương trình con của bạn trở thành một phần trong đoạn mã khởi tạo, và sau đó bạn mượn lệnh goto $ thừa ngay trước dẫn hướng end để làm vòng lặp while (true) của bạn. Nếu bạn vẫn giữ vòng lặp chính loop ... goto loop nhưng không viết gì vào giữa thì cấu trúc của chương trình mẫu vẫn được giữ, và bạn đạt được mục đích của mình. Do đó, tôi xin khẳng định rằng bạn viết code không tuân theo cấu trúc của chương trình mẫu, và chương trình mẫu không có vấn đề gì cần phải sửa. Chương trình mẫu là tổng quát, đúng cho cả trường hợp bạn thích đặt cái gì vào vòng lặp chính, hay chỉ muốn có một vòng lặp vô tận ở đó. Nếu bạn thích dùng goto $ cho vòng lặp chính, thì sau khi loại bỏ hết code giữa loop và goto loop, bạn có thể viết nó lại thành goto $ (chứ không phải xóa hẳn cái vòng lặp đó đi như bạn đã làm). Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
![]() |
![]() |
![]() |
#99 | |
Đệ tử 2 túi
Tham gia ngày: Jun 2006
Bài gửi: 27
: |
Trích:
Nhân đây cũng xin hỏi namqn (và mọi người ![]() mong mọi người chỉ giúp, thanks ! |
|
![]() |
![]() |
![]() |
#100 | |
Trưởng lão PIC bang
|
Trích:
Bạn đã nói rằng "copy nguyên về, thay cái phần nội dung trong main và chương trình con cho phù hợp với bài toán của mình rồi biên dịch rồi chạy rồi thấy nó chạy loạn lên", nhưng cái chương trình bị "chạy loạn lên" của bạn thì lại phá vỡ cấu trúc của chương trình mẫu (xóa mất vòng lặp vô tận loop ... goto loop), và dẫn đến góp ý của bạn rằng chương trình mẫu có chỗ không hợp lý. Góp ý của bạn do đó là không hợp lý. Vấn đề ở đây không phải ai đúng ai sai, mà là vấn đề bạn phá vỡ cấu trúc chương trình rồi đề nghị sửa lại chương trình mẫu để những người học sau đều phá vỡ cấu trúc giống như bạn. Đó là điều tôi không muốn xảy ra. Với câu hỏi về các tập tin .inc: những định nghĩa trong đó được trình biên dịch sử dụng khi dịch ra mã máy cho PIC, và không hề liên quan đến việc thực thi chương trình trong PIC, do đó không hề tiêu tốn một chu kỳ máy nào của PIC. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#101 |
Nhập môn đệ tử
Tham gia ngày: Sep 2008
Bài gửi: 6
: |
Mình đọc luồng này và rất cảm ơn các bạn rất nhiều .
|
![]() |
![]() |
![]() |
#102 |
Nhập môn đệ tử
Tham gia ngày: Sep 2008
Bài gửi: 6
: |
Mình đang làm đồ án về con PIC 16F877 , thiết lập hệ thồng tổng đài điện thoại nội bộ :
_2 trunk _8 Tel ra _Giao tiếp PC Hiện mình đang tìm tài liệu và mong các bạn hổ trợ những kiến thức kinh nghiệm trong quá trình thực hiện... . Cảm ơn rất nhiều |
![]() |
![]() |
![]() |
#103 |
Nhập môn đệ tử
Tham gia ngày: May 2008
Bài gửi: 9
: |
Cám ơn sự nhiệt tình của bang chủ và các câu hỏi của thành viên nhiều lắm . Mình học được rất nhiều từ các bạn . Cám ơn 1 lần nữa . Chúc picvietnam năm mới phát triển hơn trước và mọi người có được sức khỏe tốt để chúng ta tiếp tục tranh luận ^^
|
![]() |
![]() |
![]() |
#104 |
Đệ tử 7 túi
Tham gia ngày: Aug 2007
Bài gửi: 213
: |
Mình hỏi cái này hơi newbie chút nghen,trong cái hình đầu thread của anh falleaf thì làm cái mạch tạo nguồn 5V-500A ở bên dưới như thế nào vậy?Cụ thể :
-Con U3 C78l05/TO29 là con gì vậy ? -Nguồn 9V-12V DC thì mua ở đâu ra ?Bao nhiêu ampe ? -Liệu có trực tiếp nguồn 5V-500A mà không qua mạch trên kia không? -Con thạch anh chọn bao nhiêu MHZ là tốt nhất ? Hic,câu hỏi quá newbie luôn chứ không còn hơi hơi nữa,mong mọi người giúp đỡ với !!!Thanks |
![]() |
![]() |
![]() |
#105 | |
Trưởng lão PIC bang
|
Trích:
- C78L05/TO92 là vi mạch ổn áp 5 V thuộc dòng 7805 (phiên bản 78L05 chỉ có định mức 100 mA chứ không phải 500 mA như trong sơ đồ của falleaf), có kiểu vỏ TO92 (3 chân loại nhỏ, giống như các transistor C1815 hay A1015). - Nguồn 9 - 12 VDC mua ở chợ (Ở Tp. HCM thì đến chợ Nhật Tảo), số ampe tối thiểu bằng với định mức của vi mạch ổn áp 5 V (chắc chắn có thể tìm được). - Các thạch anh 4 MHz, 10 MHz, và 20 MHz tốt như nhau. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
|
|