本发明涉及单片机定时控制领域,尤其涉及一种自适应定时方法、装置。
背景技术:
单片机定时器通常用于控制脉冲的输出,在现有技术中采用的定时器控制脉冲方案中,定时器只能相对于0时刻设置正的时间序列,不适用于需要设置负的时间序列,其次,定时器的时间序列都是相对于0时刻而言的,当时序较多时会占用大量的存储空间,从而降低了定时器的性能。
技术实现要素:
发明目的:本发明旨在提供一种自适应定时方法、装置,通过计数器初值与时间序列之间的设置关系,实现定时脉冲相对0时刻可正、可负,其次,通过设置时间节点和脉冲宽度,每个定时脉冲的相对时序关系可任意配置,可以降低时序的存储开销。
技术方案:本发明提供一种自适应定时方法,包括:设定脉冲的时间序列,和定时器发生中断的时间宽度;所述时间序列包括时间节点、脉冲宽度;控制计数器开始计数,在设置的计数器初值达到时间节点时,控制触发脉冲动作;所述计数器初值依据发生中断的次数而相应增长。
具体的,所述定时器工作方式为tmod=1。
具体的,所述定时器初始化和中断时设置th0=(65536-50000)/256,tl0=(65536-50000)&0xff。
具体的,所述时间序列为t0,δt0,t1,δt1,…,tn-1,δtn-1,其中t0,t1,…,tn-1为时间节点,δt0,δt1,…,δtn-1为与各个时间节点对应的脉冲宽度,时间节点占计数器12位,脉冲宽度占计数器4位。
具体的,当计数器初值等于ti-t0时,控制触发开始脉冲;当计数器初值等于ti-t0+δti时,控制触发结束脉冲;ti为第i个时间节点。
本发明还提供一种自适应定时装置,包括:设定单元和计数单元,其中:
所述设定单元,用于设定脉冲的时间序列,和定时器发生中断的时间宽度;所述时间序列包括时间节点、脉冲宽度;
所述计数单元,用于控制计数器开始计数,在设置的计数器初值达到时间节点时,控制触发脉冲动作;所述计数器初值依据发生中断的次数而相应增长。
具体的,所述定时器工作方式为tmod=1。
具体的,所述定时器初始化和中断时设置th0=(65536-50000)/256,tl0=(65536-50000)&0xff。
具体的,所述时间序列为t0,δt0,t1,δt1,…,tn-1,δtn-1,其中t0,t1,…,tn-1为时间节点,δt0,δt1,…,δtn-1为与各个时间节点对应的脉冲宽度,时间节点占计数器12位,脉冲宽度占计数器4位。
具体的,所述计数单元,用于当计数器初值等于ti-t0时,控制触发开始脉冲;当计数器初值等于ti-t0+δti时,控制触发结束脉冲;ti为第i个时间节点。
有益效果:与现有技术相比,本发明具有如下显著优点:定时脉冲相对0时刻可正、可负;降低时序的存储开销。
附图说明
图1为本发明提供的自适应定时方法的流程示意图。
具体实施方式
下面结合附图对本发明的技术方案作进一步说明。
参阅图1,其为本发明提供的自适应定时方法的流程示意图。
步骤1,设定脉冲的时间序列,和定时器发生中断的时间宽度。
本发明实施例中,所述时间序列包括时间节点、脉冲宽度。
本发明实施例中,所述时间序列为t0,δt0,t1,δt1,…,tn-1,δtn-1,其中t0,t1,…,tn-1为时间节点,δt0,δt1,…,δtn-1为与各个时间节点对应的脉冲宽度。
在具体实施中,时间节点是控制脉冲开始的时刻,脉冲宽度是控制脉冲持续发生的时间,其中脉冲宽度δt0对应的是时间节点t0开始的脉冲,δt1对应的是t1,其他同理,不同时间节点对应的脉冲宽度可以设置的不一致,也即每个定时脉冲的相对时序关系可任意配置。
在具体实施中,时间序列中时间节点的设置相对于0时刻可正、可负,通过时间序列控制的定时脉冲可以用于控制外部器件。
本发明实施例中,定时器工作方式为tmod=1。
本发明实施例中,定时器初始化和中断时设置th0=(65536-50000)/256,tl0=(65536-50000)&0xff。
在具体实施中,在单片机中(例如8031单片机),有两个计数器(th0和tl0),设置定时器的工作模式为tm0d=1,即16位定时器,最大的计数量为65535;对于一个12m的晶体振荡器,供给计数器的脉冲时间间隔为1微秒。在初始化和中断时设置th0=(65536-50000)/256,tl0=(65536-50000)&0xff,即当发生50000次振荡后,t0溢出,产生一次中断,中断每50ms发生一次(中断的时间宽度),因此50ms可以作为定时器的时间序列单位,根据实际应用场景,中断的时间宽度也可以相应的进行调整。
本发明实施例中,时间节点占计数器12位,脉冲宽度占计数器4位。
在具体实施中,时间序列占用的存储空间为(12+4)*n/8=2n字节,可控制n个矩形脉冲的产生,最大脉冲延迟为2047*50=102350ms=102.35s,最大脉冲宽度为15*50=750ms=0.75s。通过设置时间节点和脉冲宽度,以及时间节点和脉冲宽度的计数器位数分配,每个定时脉冲的相对时序关系可任意配置,可以降低时序的存储开销。
步骤2,控制计数器开始计数,在设置的计数器初值达到时间节点时,控制触发脉冲动作;所述计数器初值依据发生中断的次数而相应增长。
本发明实施例中,当计数器初值等于ti-t0时,控制触发开始脉冲;当计数器初值等于ti-t0+δti时,控制触发结束脉冲;ti为第i个时间节点。
在具体实施中,可以设置计数器初值num=0,每次触发中断时num加1,则当num等于零时,触发第一个脉冲事件,对于其余时间序列t0,t1,…,tn-1,当num等于ti-t0时触发开始脉冲事件,当num等于ti-t0+δti时触发结束脉冲事件。
在具体实施中,通过计数器初值与时间节点之间的设置关系,实现定时脉冲相对0时刻可正、可负,在通过单片机定时器实际控制外部器件时,可以据此校正时间误差。
在具体实施中,ti可以为t0,t1,…,tn-1中任意一个时间节点,若需要重新设置脉冲的产生时间和脉冲宽度,重新设置时间序列t0,δt0,t1,δt1,…,tn-1,δtn-1即可。
本发明还提供一种自适应定时装置,包括:设定单元和计数单元,其中:
所述设定单元,用于设定脉冲的时间序列,和定时器发生中断的时间宽度;所述时间序列包括时间节点、脉冲宽度;
所述计数单元,用于控制计数器开始计数,在设置的计数器初值达到时间节点时,控制触发脉冲动作;所述计数器初值依据发生中断的次数而相应增长。
本发明实施例中,所述定时器工作方式为tmod=1。
本发明实施例中,所述定时器初始化和中断时设置th0=(65536-50000)/256,tl0=(65536-50000)&0xff。
本发明实施例中,所述时间序列为t0,δt0,t1,δt1,…,tn-1,δtn-1,其中t0,t1,…,tn-1为时间节点,δt0,δt1,…,δtn-1为与各个时间节点对应的脉冲宽度,时间节点占计数器12位,脉冲宽度占计数器4位。
本发明实施例中,所述计数单元,用于当计数器初值等于ti-t0时,控制触发开始脉冲;当计数器初值等于ti-t0+δti时,控制触发结束脉冲;ti为第i个时间节点。