3.计时系统
计时系统一般包括定时器初始化和定时设置及处理两部分。
1)定时器初始化部分又包括:
(1)定时器控制寄存器的设定
(2)相关用户寄存器的设定
(3)定时时间的初始化
2)定时设置及处理:由于系统里面会经常在不同的时间点执行不同的动作,所以定时的设置及处理变的尤为重要。例如需要以下时间的定时:
10ms定时:每10ms产生定时到达标志位
100ms定时:每100ms产生定时到达标志位
1000ms定时:每1000ms产生定时到达标志位
一般来说,10ms的工作可放在中断处理程序或主程序循环圈中执行,至于采取哪种方式主要是看时间准确性的要求。100ms以上的工作如果没有特别的要求建议放在主程序循环中执行。此外在系统时间设计中,时间不准确的问题经常发生,一般来源于时基的计算与处理。可以在定时中断处理程序中输出一个方波来检查中断发生的时间。
定时设置及处理有两种方法可作参考:
(1)计算法:利用MCU本身的定时中断作出10ms的时基,再利用计算的方法作出100ms、1000ms的定时。
(2)累加法:此方法适用于对时间没有特别要求的场合。下面以四位位元依次累加来说明做法:
假设变量timeslot以每5ms的时间来累加:
timeslot=000b
timeslot=001b;bit0=1,5ms动作
timeslot=010b;bit1=1,产生10msflag
timeslot=011b;bit0=1,执行5ms动作,此时不再检查bit1
timeslot=100b;bit2=1,产生20msflag
timeslot=101b;bit0=1,执行5ms动作
timeslot=110b;bit1=1,执行10ms动作
timeslot=111b;bit0=1,执行20ms动作
timeslot=000b;没有动作
由上面例子的规律来看,一个时间只会有一个时间任务产生,从而不会有太多
的时间单位。
4.中断和主程序的处理
1)PushandPoP动作要确实完整
i.请参照不同母体的建议作法
2)透过mnintgnd副程序来操作
i.Interrupt中产生的动作可以在中断中直接处理(又急又准的需求)
约mS等级的动作如toneoutput,RFTX,有些计时参数的递减等
ii.不需要在中断处理,设立旗标flag等待在主程序中检查处理(mnintgnd)
约100mS以上的动作:如0.5S计时动作,某些timeout命令需要AP层处理
iii.需要了解interrupt暂用系统多少时间,可以在进入中断时候做一个outputH离开中段时候作个outputL来观察,当然这方面可以利用假指令(IfDebug=1)来设置,当