Hỏi bác NHH (hoặc có cao thủ nào biết thì chỉ bảo giùm):
Khi dùng hàm delay_ms() trong chương trình con ngắt của các Timer (VD như #INT_TIMER1) hình như có vấn đề gì đó.
Khi dịch chương trình thì có cảnh báo " Interrupts disabled..." (Theo mình hiểu thì là mọi ngắt khác điều bị cấm)
Khi chạy, nếu chương trình chính có chạy thì thời gian gây ngắt (của Timer1) lại khác so với khi không chạy gì.
Đây là toàn bộ chương trình:
#include<16F877A.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=20000000)
int i;
int16 count;
#INT_TIMER1
void lapngat()
{
count++;
if (count==200)
while(true)
{
output_high(PIN_C1);
delay_ms(1000);
if(!input(PIN_B3)) break;
output_low(PIN_C1);
delay_ms(1000);
}
else set_timer1(0);
}
void main(void)
{
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
set_timer1(0);
count=0;
while(true)
if(!input(PIN_B0)) break;
while(true)
{
if(!input(PIN_B1))
while(true)
{
output_high(PIN_C0);
for (i=1;i<=3;i++)
delay_ms(1000);
output_low(PIN_C0);
delay_ms(1000);
if(!input(PIN_B2)) break;
}
}
}
Thanks to everyone who is interested in.
|