PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 28-12-2010, 05:02 PM   #1
tumi_kt
Đệ tử 1 túi
 
Tham gia ngày: Dec 2008
Bài gửi: 16
:
Exclamation 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();
}
}
__________________
tumi_kt@yahoo.com.vn
tumi_kt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-12-2010, 07:29 PM   #2
sunshine
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ị.
sunshine vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-01-2011, 08:09 AM   #3
duyphuoc
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!
duyphuoc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-01-2011, 12:59 PM   #4
tdm
Đệ tử 7 túi
 
Tham gia ngày: May 2005
Bài gửi: 258
:
Trích:
Nguyên văn bởi tumi_kt View Post
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();
}
}
bài này sửa như sau:
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ẻ
tdm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 09:47 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam