Ðề tài: CCS C for PIC16F877A
View Single Post
Old 13-02-2007, 05:29 PM   #129
khangcodt
Đệ tử 2 túi
 
Tham gia ngày: Nov 2006
Bài gửi: 27
:
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.
khangcodt vẫn chưa có mặt trong diễn đàn