![]() |
|
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 |
|
![]() |
#1 | |
Đệ 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. |
|
![]() |
![]() |
![]() |
#2 |
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 |
![]() |
![]() |
![]() |
#3 | |
Đệ 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 ! |
|
![]() |
![]() |
![]() |
#4 | |
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 |
|
![]() |
![]() |
![]() |
|
|