chào các bác! em có chút rắc rối như sau:
em sử dụng 2 ngắt của 16f887 là ngắt ngoài(trên rb0), và một ngắt on_change(rb5 chẳng hạn) .em sử dụng 2 phím bấm nối tới 2 chân này.
mục đích của em là: ấn button1 thì thực hiện chuong_trinh1
ấn button2 thì thực hiện void chuong_trinh2()
nhưng khi lắp mạch test thì kết quả luôn như sau:
đầu tiên , hiện dòng chữ " hello" trong main(),5 giây sau thì chương trình TỰ ĐỘNG nhảy vào ngắt luôn (thực hiện chương _trinh1) mà em chưa hề ấn phím(tất nhiên ấn phím 2 cũng ko tác dụng).em ko hiểu tại sao nữa.đây là code:
Code:
#include <16f887.h>
#include <def_877a.h>
#device *=16 ADC=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#include <lcd_lib_4bit.c>
void chuong_trinh1();
void chuong_trinh2();
#int_RB
void RB_isr(void)
{ chuong_trinh1();
}
#int_EXT
void EXT_isr(void)
{
chuong_trinh2();
}
void chuong_trinh1()
{
lcd_init();
lcd_putcmd(0x01);//xoa man hinh
lcd_putcmd(0x80);
lcd_putchar("chaocacban");
delay_ms(5000);
}
void chuong_trinh2()
{
lcd_init();
lcd_putcmd(0x01);//xoa man hinh
lcd_putcmd(0xc0);
lcd_putchar("mynamehung");
delay_ms(5000);
}
void main()
{ trisb=0xff;
enable_interrupts(INT_RB);
enable_interrupts(INT_EXT);
ext_int_edge( H_TO_L );
enable_interrupts(GLOBAL);
lcd_init();
lcd_putcmd(0x01);//xoa man hinh
lcd_putcmd(0x80);
lcd_putchar("hello");
delay_ms(5000);
while(1);
}
các bác giúp em với.thanks các bác nhiều
ah,còn một vấn đề nữa là muốn thoát khỏi ngắt thì làm thế nào ạ(ví dụ đang làm ctrinh thu nhất em muốn thực hiện chuong trình 2 ngay sau động tác bấm phím chẳng hạn)