Code:
#include <16F877A.h>
#device *=16 ADC=8
#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
#byte portb=0x6
#bit RB7 =portb.7
#bit RBIF=intcon.0
#bit RBIE=intcon.3
//-----------------------------
int8 const led[]={1,2,4,8,16,32,64,128};
int8 j=0,i=0;
//========ham ngat tren RB ==========//
#int_rb
void ngat_rb()
{
if(rb7==0)
for(j=8;j>0;j--)
{
output_d(led[j-1]);
delay_ms(10);
}
}
//===========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(true)
{
for(i=0;i<8;i++)
{
output_d(led[i]);
delay_ms(10);
}
}
}
Mình đã sửa lại đoạn code của bạn rồi ..thay đổi một chút thôi.
Mình đã kiểm tra và chạy ok rồi... Nhưng có lẽ dùng delay trong hàm ngắt là ko nên . Nên tìm 1 giải thuật khác , dịch bit chẳng hạn ...
Còn sự khác biệt giữa các ngắt :" bạn xem lại phía trên các anh có chỉ dẫn đó ...
hy vọng mọi người sẽ cùng nhau tìm hiểu nhiều hơn...có sai nhiều .. có sửa nhiều ..--->> tiến bộ nhiều (^_^)!!!
Rất cảm ơn vì đã gởi thắc mắc lên đây.. qua bài trên mình đã tìm hiểu thêm được nhiều điều mới..