Em viết chương trình như sau: chương trình dùng để chạy led thuận trên portD, khi có ngắt trên RB7 thì chạy led ngược lại.
Code:
/#include <16F877A.h>
#device *=16
#fuses NOWDT,HS,NOPROTECT
#use delay(clock=20000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(a)
#use fast_io(d)
#use fast_io(e)
#byte intcon=0x000B
#bit RBIF=intcon.0
int8 const led[]={1,2,4,8,16,32,64,128};
int8 a=0,j=0,i=0;
int16 dem=0;
//========ham ngat timer0==========//
#int_rb
void ngat_rb()
{
for(j=8;j>0;j--)
{
output_d(led[j-1]);
delay_ms(10);
}output_d(0);RBIF=0;
}
//===========ham chinh=============//
void main()
{set_tris_d(0);
set_tris_b(0xff);
enable_interrupts(global);
enable_interrupts(int_rb);
ext_int_edge(L_TO_H );
while(1)
{ for(i=0;i<8;i++)
{
output_d(led[i]);
delay_ms(10);
}output_d(0);
}
}
còn đây là sơ đồ mạch:
đầu tiên nó chạy thuận thì đúng rồii. khi bấm nut thì nó chạy ngược lại cũng đúng nhưng sau đó thì nó cứ chạy ngược mãi mà không chạy thuận lại. Em nghĩ khi nó chạy xong chương trình ngắt rồi thì nó sẽ thực hiện chương trình chính chứ. Ở đây hàm delay có gây ra lỗi ko?
Cho em Hỏi thêm 1 ý nữa: Ngắt sẽ xảy ra khi có chuyển trạng thái trên chân RB4-Rb7. vây nếu trong chương trinh ta thiêt lập là output và cho chuyển trạng thái bằng lệnh thì có xảy ra ngắt ko? Sự khác nhau giữa ngắt ngoài trên chân RBO và ngắt trên RB4->RB7 là gì?