![]() |
|
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. |
|
|
|
| Ðiều Chỉnh | |
| Xếp Bài | |
|
|