带时间参数的代码书写方式
这类代码通常做滤波使用或者延时输出稳定HZ 的方波。通常出现在通信代码,按键/触发信号滤波防动,定周期频率的输出应用中。
通常书写方法有三种:
1.使用nop做延时方式,这种方式为串行,延时占用主循环时间,不占用定时器资源,方法简单。
2.使用定时器做一个定时溢出中断,在中断里面加一个自增加变量,通过对变量值的判定来确定时间。这种方式不占用主循环时间,但是需要外部定时器资源,且可能出现主循环时间过长而时间漏检测的情况,且定时器中断方式配置较复杂。
3.方法三是在方法二基础上修改,方法二直接检测定时器里面的数值,因为主程序的时间以及中断定时触发,会发生漏检测的情况,所以我们判断时间不是直接使用定时器的时间,而是通过定时器中断做一个累加变量,做有上限值的加法,在主循环里通过一个范围检测累加次数并判断目标时间,做要个定时任务。优点解决方法二可能出现的漏检测情况,但是相对的逻辑也复杂,不过这对于嵌入式系统基本可以忽略不计。
if(tmCycle < 20000)
{
tmCycle ++; //定时节拍计数
}
把上面这段代码放到定时器中断函数里面。
if(tmCycle > 40) //1ms 一次
{
tmCycle = 0;
下面这段代码放到主循环中,在这个的基础上 做滤波,做延时,只需要对滤波次数做统计就可以得到时间。
吹牛、扯淡、交朋友,请联系:18665321219