![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 16
: |
![]() 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(); } }
__________________
tumi_kt@yahoo.com.vn |
![]() |
![]() |
![]() |
#2 |
Nhập môn đệ tử
Tham gia ngày: May 2009
Bài gửi: 3
: |
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ị. |
![]() |
![]() |
![]() |
#3 |
Nhập môn đệ tử
Tham gia ngày: May 2010
Bài gửi: 3
: |
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! |
![]() |
![]() |
![]() |
#4 | |
Đệ tử 7 túi
Tham gia ngày: May 2005
Bài gửi: 258
: |
Trích:
Code:
#include <16f877a.h> #include <def_16f877a.h> #fuses NOPROTECT,HS,NOWDT #use delay(clock=2000000) char kieu_led; #int_rb void rb_isr() { delay_ms(10);//chống dội phím if(!input(pin_b4)) { portd=0xff; while(!input(pin_b4))//chờ nhả phím { } delay_ms(10);//chống dội phím } else if(!input(pin_b5)) { portd=0x00; while(!input(pin_b5))//chờ nhả phím { } delay_ms(10);//chống dội phím } else if(!input(pin_b6)) { portd=0x0f; while(!input(pin_b6))//chờ nhả phím { } delay_ms(10);//chống dội phím } } void main() { trisb=0xf0;//portb input trisd=0x00;//portd output port_b_pullups(true); enable_interrupts(global); enable_interrupts(int_rb); ext_int_edge(h_to_l); while(1) { } }
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề. thay đổi nội dung bởi: tdm, 21-01-2011 lúc 01:03 PM. Lý do: bỏ code vào thẻ |
|
![]() |
![]() |
![]() |
|
|