带时间参数的代码书写方式

这类代码通常做滤波使用或者延时输出稳定HZ 的方波。通常出现在通信代码,按键/触发信号滤波防动,定周期频率的输出应用中。

通常书写方法有三种:

1.使用nop做延时方式,这种方式为串行,延时占用主循环时间,不占用定时器资源,方法简单。

2.使用定时器做一个定时溢出中断,在中断里面加一个自增加变量,通过对变量值的判定来确定时间。这种方式不占用主循环时间,但是需要外部定时器资源,且可能出现主循环时间过长而时间漏检测的情况,且定时器中断方式配置较复杂。

3.方法三是在方法二基础上修改,方法二直接检测定时器里面的数值,因为主程序的时间以及中断定时触发,会发生漏检测的情况,所以我们判断时间不是直接使用定时器的时间,而是通过定时器中断做一个累加变量,做有上限值的加法,在主循环里通过一个范围检测累加次数并判断目标时间,做要个定时任务。优点解决方法二可能出现的漏检测情况,但是相对的逻辑也复杂,不过这对于嵌入式系统基本可以忽略不计。

if(tmCycle < 20000)

{

    tmCycle ++;     //定时节拍计数

}

把上面这段代码放到定时器中断函数里面。

if(tmCycle > 40)   //1ms 一次

{

    tmCycle = 0;

下面这段代码放到主循环中,在这个的基础上 做滤波,做延时,只需要对滤波次数做统计就可以得到时间。

Nyquest-8bit-mcu交流群群二维码

吹牛、扯淡、交朋友,请联系:18665321219

posted @ 2020-09-20 11:01  steven_lg  阅读(219)  评论(0编辑  收藏  举报