Nortune
06-12-2010, 07:08 AM
Mình mới viết 1 code để ngắt port B trong C18 [RB4 - RB7], nhưng không hiểu sao khi nạp code thì ngay cả những câu lệnh khởi tạo cũng không thực hiện được. Nhưng khi mình bỏ phần code ngắt đi thì những câu lệnh trong hàm main lại thực hiện như bình thường. Ai có kinh nghiệm, xin chỉ giùm mình sai ở chỗ nào nhé.
#include <p18F4620.h>
#include "../code/gpio.h"
#include "../code/lcd.h"
#pragma config WDT = OFF //check
#pragma config OSC = HS //check
#pragma config PWRT = ON //check
#pragma config BOREN = SBORDIS //check
#pragma config BORV = 3 //check
#pragma config MCLRE = ON //check
#pragma config LVP = OFF //check
void main();
void ISR ();
char mes1[] = "Test interrupt";
char mes2[] = "OK";
void main ()
{
RCONbits.IPEN = 0; //cho phep mo hinh uu tien ngat
INTCONbits.RBIE = 1; //enalbe bo ngat RB
INTCONbits.RBIF = 0; //xoa co ngat cua RB
INTCONbits.PEIE = 1; //cho phep toan bo ngat ngoai vi khong bi che
INTCONbits.GIE = 1; //cho phep toan bo ngat khong bi che
portD_digital();
lcd_init();
lcd_goto_xy(1,1);
lcd_display_string(mes1);
while(1);
}
#pragma code high_vector = 0x08
void interrupt(void)
{
_asm
goto ISR
_endasm
}
#pragma code
#pragma interrupt ISR
void ISR()
{
lcd_goto_xy(1,2);
lcd_display_string(mes2);
INTCONbits.RBIF = 0;
}
#include <p18F4620.h>
#include "../code/gpio.h"
#include "../code/lcd.h"
#pragma config WDT = OFF //check
#pragma config OSC = HS //check
#pragma config PWRT = ON //check
#pragma config BOREN = SBORDIS //check
#pragma config BORV = 3 //check
#pragma config MCLRE = ON //check
#pragma config LVP = OFF //check
void main();
void ISR ();
char mes1[] = "Test interrupt";
char mes2[] = "OK";
void main ()
{
RCONbits.IPEN = 0; //cho phep mo hinh uu tien ngat
INTCONbits.RBIE = 1; //enalbe bo ngat RB
INTCONbits.RBIF = 0; //xoa co ngat cua RB
INTCONbits.PEIE = 1; //cho phep toan bo ngat ngoai vi khong bi che
INTCONbits.GIE = 1; //cho phep toan bo ngat khong bi che
portD_digital();
lcd_init();
lcd_goto_xy(1,1);
lcd_display_string(mes1);
while(1);
}
#pragma code high_vector = 0x08
void interrupt(void)
{
_asm
goto ISR
_endasm
}
#pragma code
#pragma interrupt ISR
void ISR()
{
lcd_goto_xy(1,2);
lcd_display_string(mes2);
INTCONbits.RBIF = 0;
}