[发明专利]一种在单片机系统中实现高精度延时的方法有效
申请号: | 201710096343.6 | 申请日: | 2017-02-22 |
公开(公告)号: | CN106933535B | 公开(公告)日: | 2019-11-26 |
发明(设计)人: | 赵进云;谢纯珀 | 申请(专利权)人: | 福建魔方电子科技有限公司 |
主分类号: | G06F9/30 | 分类号: | G06F9/30 |
代理公司: | 35212 福州市鼓楼区京华专利事务所(普通合伙) | 代理人: | 林云娇<国际申请>=<国际公布>=<进入 |
地址: | 350000 福建省福州*** | 国省代码: | 福建;35 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 单片机 系统 实现 高精度 延时 方法 | ||
本发明提供一种在单片机系统中实现高精度延时的方法,所述方法为:所述单片机系统内设置有一定时器,所述定时器配置成超时时间为T,基于这个周期性的定时器,获得单位时间T内,单片机所能执行的加减法次数CPU_CNT;所述次数CPU_CNT按位来确定,先确定CPU_CNT最高为1的位,然后依次从高到低的确定每位的值;获得单位时间T内能执行多少次加法或减法运算之后,在单片机系统延时函数中把延时时间转换成对应的加法或减法次数便可实现精确延时。本发明实现通用的,灵活的,低成本的高精度软件延时功能。
技术领域
本发明涉及金融设备技术领域,尤其涉及一种在单片机系统中实现高精度延时的方法。
背景技术
现有的单片机平台上的应用,驱动开发过程中会用到很多的延时函数。不同于LINUX系统,WINDOWS系统平台上的开发,在单片机系统上很多底层函数都需要自己去实现,包括前面所说的延时功能。灵活的实现这些功能,能够降低产品的维护成本,减少开发周期。单片机系统如Cortex系列的M0/3/4等单片机系统。
目前大多数单片机平台上采用的延时方式有如下两种:
执行固定的循环次数来延时。这种方式不占用硬件资源,但是会受主频变化的影响,因为当处理器主频发生变化的时候,执行固定循环的所需时间也会跟着改变,这导致程序中的所有这类延时都不再准确。而且也受编译优化选项的影响。
使用硬件定时器计时来延时。此方法能够准确计时,但是需要占用一个硬件定时器,在资源比较紧张的系统上面,这会增加硬件成本。而且不同处理器的定时器控制方式上也存在差异,移植的时候会开发成本,另外还要考虑同步的问题。
发明内容
本发明要解决的技术问题,在于提供一种在单片机系统中实现高精度延时的方法,具有成本低,灵活性高,可移植性高的特性。
本发明是这样实现的:一种在单片机系统中实现高精度延时的方法,所述方法为:所述单片机系统内设置有一定时器,所述定时器配置成超时时间为T,T用于记录时间的流逝;
基于这个周期性的定时器,获得单位时间T内,单片机所能执行的加减法次数CPU_CNT;所述次数CPU_CNT按位来确定,先确定CPU_CNT最高为1的位,然后依次从高到低的确定每位的值;
获得单位时间T内能执行多少次加法或减法运算之后,在单片机系统延时函数中把延时时间转换成对应的加法或减法次数便可实现精确延时。
进一步的,所述方法中所述次数CPU_CNT按位来确定,先确定CPU_CNT最高为1的位具体为:步骤10、在单片机系统的定时器中断处理函数中用变量TIMER_CNT表示对超过T时间次数的计数,每计数一次表示时间流逝T;
步骤11、给定一初始值CPU_COUNT,该CPU_COUNT表示初始时假设的的单位时间T内处理器能执行的加减法次数,
步骤12、将CPU_COUNT左移一位,即CPU_COUNT=CPU_COUNT<<1
步骤13、定时器开始一个新的计时周期时,即TIMER_CNT发生变化时,保存TIMER_CNT当前的值,然后执行CPU_COUNT次减法或加法运算;
步骤14、将步骤13中保存的TIMER_CNT的值,与经过减法或加法运算后TIMER_CNT的值进行比较,如果两个值相同,则CPU_COUNT偏小,跳转到步骤12执行;如果当前值大于之前步骤13保存的值,则CPU_COUNT偏大,把CPU_COUNT右移一位,即CPU_COUNT=CPU_COUNT>>1;这时便确定了最高有效位。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于福建魔方电子科技有限公司,未经福建魔方电子科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710096343.6/2.html,转载请声明来源钻瓜专利网。