View Full Version : cho em hỏi về ngắt ngoài của pic16f877
hotronghieu
12-08-2010, 10:13 AM
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);
}
}
baquyen
12-08-2010, 10:35 AM
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é
hotronghieu
12-08-2010, 10:43 AM
như thế vẫn ko được. ko biết chương trình có bị sai chỗ nào ko?
baquyen
12-08-2010, 10:51 AM
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?
hotronghieu
12-08-2010, 10:55 AM
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à
baquyen
12-08-2010, 11:13 AM
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ứ
hotronghieu
12-08-2010, 11:23 AM
anh coi gium em
baquyen
12-08-2010, 11:28 AM
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 đó
pic_13
12-08-2010, 11:31 AM
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);
}
}
thử cái này xem nào,trong so do thi noi vcc vao rb0:
#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;
}
}
}
baquyen
12-08-2010, 11:37 AM
Làm như bác pic_13 thấy ok rùi đó :)
hotronghieu
12-08-2010, 01:22 PM
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à
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.