PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

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
Prev Previous Post   Next Post Next
Old 02-08-2008, 01:06 PM   #11
bachelor
Đệ tử 2 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 27
:
Trích:
Nguyên văn bởi namqn View Post
Không đồng ý với bạn, vì bạn nêu lên một chi tiết không hợp lý ở post trước đó, bây giờ lại bắt sang một chi tiết (được cho là) không hợp lý khác, mà không thể hiện được cái bất hợp lý mà bạn đã nêu ở post trước.

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,
Theo mẫu:
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
;======================================
thì chạy sai
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.
bachelor vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 02:59 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam