微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 我想用ATmega8编一个延时函数,用它的内部晶振,8MHZ,让蜂鸣器响20S,小灯闪烁20S,就是一个20S的延时,请问要怎么编程序,求帮助

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

时间:10-02 整理:3721RD 点击:
我想用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闪烁跟蜂鸣器很简单。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top