![]() |
|
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ử 1 túi
Tham gia ngày: Jul 2008
Bài gửi: 17
: |
![]() 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); } 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) thay đổi nội dung bởi: namqn, 24-11-2008 lúc 11:15 PM. |
![]() |
![]() |
|
|