PDA

View Full Version : Chương trình không vào ngắt được


troiuuuu
28-12-2010, 05:38 PM
Chào cả nhà!Mọi người xem sao đoạn code của mình chương trình nó không vào ngắt dc?
#include<16f877a.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=4000000)
#use fast_io(b)
#byte intcon=0x0B
#byte portb=0x06
#byte portd=0x08
#byte intcon=0x0B
#bit RB4=portb.4
#bit RB5=portb.5
#bit RB6=portb.6
#bit RB7=portb.7
#bit RBIF=intcon.0 //dinh nghia co ngat RB
#bit RBIE=intcon.3 //dinh nghia bit cho phep ngat RB
#int_RB
int8 a;
void ngat_RB()
{
if(RB4==0)
{
while(1);
{
//Khong lam gi het
}
}
if(RB5==0)
{
while(1);
{
//Khong lam gi het
}
}
if(RB6==0)
{
while(1);
{
//Khong lam gi het
}
}
if(RB7==0)
{
while(1);
{
//Khong lam gi het
}
}
}

main()
{
set_tris_b(0b11110000);
set_tris_d(0);
enable_interrupts(global);
enable_interrupts(int_RB);
ext_int_edge(H_to_L);
while(true)
{
a=a<<1;
if(a==256)
{
a=1;
}
portd=a;
delay_ms(100);
}
}

troiuuuu
29-12-2010, 04:47 PM
Không ai giúp hết vậy?????????????

nhiot081290
30-12-2010, 04:41 PM
trong chuong trinh ngắt chỉ cần 1 lệnh thui
ví dụ như khi nhấn thì portd =0 hay =0xFF ( tùy theo yeu cau)

troiuuuu
31-12-2010, 08:40 AM
Làm sao bạn biết được là không vào ngắt ? Dấu hiệu nào ?

Thì mình thử Protect mà sao khi nhấn nút kết nối từ PortB(RB4-->RB7) thì nó không có hiện tượng gì hết,lẽ ra Led phải dừng lại chứ.

hoc_picpicpic
31-12-2010, 10:28 AM
#include<16f877a.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=4000000)
#use fast_io(b)
#byte intcon=0x0B
#byte portb=0x06
#byte portd=0x08
#byte intcon=0x0B
#bit RB4=portb.4
#bit RB5=portb.5
#bit RB6=portb.6
#bit RB7=portb.7
#bit RBIF=intcon.0 //dinh nghia co ngat RB
#bit RBIE=intcon.3 //dinh nghia bit cho phep ngat RB
#int_RB
int8 a; // Doi cho~ cai' nay` cho #int_RB "Sai o day" (^_^) ***
void ngat_RB()
{
if(RB4==0)
{
while(1);
{
//Khong lam gi het
}
}
if(RB5==0)
{
while(1);
{
//Khong lam gi het
}
}
if(RB6==0)
{
while(1);
{
//Khong lam gi het
}
}
if(RB7==0)
{
while(1);
{
//Khong lam gi het
}
}
}

main()
{
set_tris_b(0b11110000);
set_tris_d(0);
enable_interrupts(global);
enable_interrupts(int_RB);
ext_int_edge(H_to_L);
while(true)
{
a=a<<1;
if(a==256)
{
a=1;
}
portd=a;
delay_ms(100);
}
}


Đổi chỗ khai bao' bien' a cho #int_RB la chay dc

troiuuuu
01-01-2011, 12:13 PM
Cám ơn bạn nhiều!Mà bạn cho mình hỏi tại sao lại đổi chỗ nó mới chạy ngắt dc??

hoc_picpicpic
03-01-2011, 02:43 AM
sau khi khai báo #int_RB thi viết luôn chương trình ngắt bên dưới. bài lập trình của bạn CCS coi như chưa viết hàm ngắt