Ðề tài: interrupt in C18
View Single Post
Old 25-07-2007, 02:34 AM   #3
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Viết như sau (lấy ví dụ xử lý UART và ngắt INT1 ở phần low priority, thứ tự xét là UART rồi đến INT1):

Code:
void dclk_handler( void );	//RB0
void rx_handler( void );	//uart
void reset_button(void);    //RB1

#pragma code dclk_interrupt = 0x08
void high_vector( void )
{
	_asm goto dclk_handler _endasm
} 

#pragma code low_interrupt = 0x18
#pragma interruptlow low_vector
void low_vector(void)
{
//code gọi các hàm xử lý các ngắt low priority
	if (PIR1bits.RCIF) rx_handler();
	if (INTCON3bits.INT1IF) reset_button();
}

#pragma code
#pragma interrupt dclk_handler
void dclk_handler(void) {
//code của phần high priority
}

void rx_handler(void) {
//code cho xử lý ngắt UART
}

void reset_button(void) {
//code cho xử lý ngắt INT1
}
Chú ý: code vừa được chỉnh lại.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263

thay đổi nội dung bởi: namqn, 25-07-2007 lúc 10:31 PM.
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn