我想用ATmega8编一个延时函数,用它的内部晶振,8MHZ,让蜂鸣器响20S,小灯闪烁20S,就是一个20S的延时,请问要怎么编程序,求帮助
这是基于51单片机的定时器中断服务程序,可以借鉴。
void timer0() interrupt 1 //定时器0中断服务程序
{
static unsigned int Cnt200us=0; //声明200微妙计数变量
static unsigned int Cnt500ms=0; //声明500毫妙计数变量
Cnt200us++; //每进入中断一次200微妙计数变量自+1
if(Cnt200us>=2500) //如果Cnt200us>=2500,0.5秒
{
Cnt200us=0; //Cnt200us计数变量清0
Cnt500ms++; //Cnt500ms计数变量自+1
Buzzer=~Buzzer; //蜂鸣器端口取反(间歇响)
LED=~LED; //LED端口取反(闪烁)
if(Cnt500ms>=40) //如果Cnt500ms>=40,20秒
{
Cnt200us=0; //Cnt200us计数清0
Cnt500ms=0; //Cnt500ms计数清0
Buzzer=1; //关闭蜂鸣器
LED=1; //关闭LED
ET0=0; //关闭定时器0中断
TR0=0; //关闭定时器
}
}
}
20S延时只能用定时器中断计数处理,如果用普通软件延时函数,那么延时期间其他事情都做不了了。
那用定时器中断要怎么编
STM8s的定时器中断计数中断,你可以参考一下!没1ms中断一次。Sys_Timer++;至于LED闪烁跟蜂鸣器很简单。