![]() |
cho em hỏi về ngắt ngoài của pic16f877
em có 1 doạn code nhấp nháy led thông qua nút nhấn kết nối với chân rb0/int0 của pic nhưng e mô phỏng không chạy được.các pro giúp đỡ giùm.dưới day là code em viết.
#include <16f877a.h> #include <def_877a.h> #int_ext #fuses hs,nowdt #use delay(clock=8000000Hz) int8 a; void ext_isr(void) { a=1; } void main() { trisd=0x00; trisb=0x01; portb=0x00; enable_interrupts(int_ext); ext_int_edge(h_to_l); enable_interrupts(GLOBAL); while(a==1) { portd=~portd; delay_ms(200); } } |
bạn thử để #int_ext ngay phía trước void ext_isr(void), cú pháp nó bắt vậy, mình ko hiểu sao bạn để xa nhau thế. Thử xem có được ko nhé
|
như thế vẫn ko được. ko biết chương trình có bị sai chỗ nào ko?
|
bạn post luôn cái mô phỏng của bạn đi và mô tả hoạt động của nó thế nào, mình nghĩ ct của bạn có vấn đề luôn, nếu xảy ra ngắt thì a nó bằng 1 mãi mãi, vậy thì a==1 từ đó sẽ true mãi luôn, cái hàm ngắt có ý nghĩa gì nữa ko?
|
1 Attachment(s)
mình viết đơn giản như thế để mình test ngắt 1 lần đầu tiên thôi, mình viết vậy cho đơn giản mà
|
Hix, đang học HTPIC, bạn gửi cái file def_877a và cái file hex của thằng này luôn đi :). Cái CCS mới cài lại, thiếu đủ thứ
|
1 Attachment(s)
anh coi gium em
|
Nó chạy mà bạn, cái mô phỏng bạn quên nối chân rb0 lên VCC thông qua điện trở 330 mà trong thực tế n ta hay dùng điện trở 1k đến 10k đó
|
Trích:
#include <16f877a.h> #include <def_877a.h> #fuses hs,nowdt #use delay(clock=8000000) int8 a=0; #int_ext void ext_isr(void) {a=1; } void main() { trisd=0x00; trisb=0x01; portb=0x00; portd=0x00; enable_interrupts(int_ext); ext_int_edge(h_to_l); enable_interrupts(GLOBAL); while(1) {if(a==1){ portd=~portd; a=0; } } } |
Làm như bác pic_13 thấy ok rùi đó :)
|
sao chân rd6 trong file mô phổng của em lại khác mấy chân còn lại vậy?các chân em khai báo như nhau mà
|
Múi giờ GMT. Hiện tại là 12:52 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam