Mình đã điều khiển ngắt RB được rồi, mình gởi source để mọi người cùng tham khảo.
Port B được nối với keypad 4x4. Nếu nhấn 1 nút trên port B thì sẽ xuất 1 ký tự 'c' qua RS232.
Nhưng có 1 chỗ mình chưa hiểu là nếu mình comment khối lệnh IF trong hàm ngắt RB_isr() thì ký tự 'a' được xuất ra liên tục(hàm ngắt xãy ra liên tục).
Có ai giải thích dùm mình được không?
Code:
#include <18F4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000,crystal)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#byte portb = 0xf81
#use fast_io(B)
static int old_b_state;
#int_RB
void RB_isr(void) {
putc('a');
if (old_b_state != portb)
{
disable_interrupts(INT_RB);
putc('c');
enable_interrupts(INT_RB);
}
}
void main() {
port_b_pullups(TRUE);
output_b(0xf0);
set_tris_b(0xf0);
old_b_state = portb;
enable_interrupts(INT_RB);
enable_interrupts(global);
while (TRUE)
{
}
}