单片机/MCU论坛
直播中

lilvt

7年用户 29经验值
私信 关注
[问答]

我想用ATmega8编一个延时函数,用它的内部晶振,8MHZ,让蜂鸣器响20S,小灯闪烁20S,就是一个20S的延时,请问要怎么编程序,求帮助

我想用ATmega8编一个延时函数,用它的内部晶振,8MHZ,让蜂鸣器响20S,小灯闪烁20S,就是一个20S的延时,请问要怎么编程序,求帮助
  • {VYOL%T~9GK)U)Q3BEMLII6.png

回帖(4)

武林

2017-4-17 16:14:04
引用: lilvt 发表于 2017-4-18 13:16
那用定时器中断要怎么编

这是基于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;                                        //关闭定时器
                }
        }
}
举报

武林

2017-4-17 20:03:49
20S延时只能用定时器中断计数处理,如果用普通软件延时函数,那么延时期间其他事情都做不了了。
举报

lilvt

2017-4-18 13:16:53
引用: wulinwl 发表于 2017-4-17 20:03
20S延时只能用定时器中断计数处理,如果用普通软件延时函数,那么延时期间其他事情都做不了了。

那用定时器中断要怎么编
举报

徐先生

2017-4-20 16:38:22
STM8s的定时器中断计数中断,你可以参考一下!没1ms中断一次。Sys_Timer++;至于LED闪烁跟蜂鸣器很简单。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分