![]() |
ngắt onchange RB
Mình có đoạn code dùng ngắt RB trên 3 pin RB4-RB6.ý tưởng là ứng với từng phím nhấn sẽ làm LED nháy theo 1 kiểu khác nhau.nhưng sao code ko chạy nhỉ?bro nào biết lỗi này nằm ở đâu ko?chỉ giúp mình với. code mình như sau: thankssssssss!!!!!!!!
#include <16f877a.h> #include <def_16f877a.h> #fuses NOPROTECT,HS,NOWDT #use delay(clock=2000000) char kieu_led; void chuong_trinh(); #int_rb void rb_isr() { chuong_trinh(); } void chuong_trinh() { if(!input(pin_b4)) portd=0xff; else if(!input(pin_b5)) portd=0x00; else if(!input(pin_b6)) portd=0x0f; } void main() { trisb=0xf0;//portb input trisd=0x00;//portd output enable_interrupts(global); enable_interrupts(int_rb); ext_int_edge(h_to_l); while(1) { chuong_trinh(); } } |
Sẳn đó anh chị coi dùm em vấn đế này. Khi có tín hiệu ngắt từ RB[4:7] thì nó nhảy vào chương trình ngắt. Em dùng nhưng lệnh sau để kiểm tra nhưng chân ở RB[4:7] để thoát ra
; KIEM TRA PHIM BAM KIEMTRA BTFSS PORTB, 4 GOTO EXIT_INT BTFSS PORTB, 5 GOTO EXIT_INT BTFSS PORTB, 6 GOTO EXIT_INT BTFSS PORTB, 7 GOTO EXIT_INT GOTO KIEMTRA Lúc đó khi nhấn nút thì nó nhảy ra nhưng khi đợi 1 lúc rồi buông tay ra thì nó nhảy lại vào chương trình ngắt. Em đã CLRF RBIF trước khi thoát ngắt. Mong các bác giúp dùm em làm sao thoát ngắt mà không bị ảnh hưởng bởi hiện tượng trên. Cách nổi ở port B: Bình thường thì mức cao, nhấn thì xuống mức thấp. Cho em hỏi là ngắt RB[4:7] không phải chọn cạnh xung đúng không ?( Đọc trong datasheet 16F877A nối vậy ) Em xin cám ơn anh chị. |
Tôi thấy bạn tumi_kt chưa set R pullup
Còn ngắt trên Port B là ngắt onchange nhé bạn sunshine, nghĩa là bất kỳ thay đổi nào trên các chân của Port B cũng dẫn ngắt cả. Thân! |
Trích:
Code:
#include <16f877a.h> |
Múi giờ GMT. Hiện tại là 08:53 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam