View Single Post
Old 05-03-2009, 06:11 PM   #11
tranhuyky
Đệ tử 2 túi
 
Tham gia ngày: Nov 2006
Bài gửi: 39
:
Send a message via Yahoo to tranhuyky
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) 
   {
   }
}

thay đổi nội dung bởi: tranhuyky, 06-03-2009 lúc 10:02 AM.
tranhuyky vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn