一种51单片机高精度计时方法

文档序号:6262329阅读:1876来源:国知局
一种51单片机高精度计时方法
【专利摘要】本发明涉及一种51单片机高精度计时方法,采用了连续读取定时器和适当屏蔽定时器的方法,其中:一、连续两次读取定时器的数值,解决了定时器低8位溢出进位造成的计时误差;二、适当屏蔽定时器并配合读取定时器溢出标志位,解决了定时器低16位溢出进位造成的计时误差,实现了51单片机的高精度计时,且本发明方法仅需要51单片中的定时器即可实现,不需要外围复杂的计时电路,具有相对较低的成本,且方法简单,易于实现,具有较强的实用性。
【专利说明】一种51单片机高精度计时方法
【技术领域】
[0001]本发明涉及一种51单片机高精度计时方法,属于控制【技术领域】。
【背景技术】
[0002]以时间为控制量的控制系统被广泛地应用于现代的工业生产与制造业中,那么高精度的计时功能成为了高精度控制的前提,目前绝大部分高精度控制系统的计时功能均通过专用的计时芯片完成,如文章“高精度无线应变测量系统硬件设计”,作者:张仕明,陈伟民,章鹏,刘显明,雷小华,《传感器与微系统》,31 (12),2012。但这种做法存在明显的缺陷:控制系统需要额外的外围电路和芯片,这无疑增加了系统的复杂度和成本。
[0003]基于51单片机最小系统,仅使用其内部某一个16位定时器,因此具有最小的系统复杂度和最低的成本。但简单地使用51单片机的定时器并不能完成高精度的计时功能,因为51单片机的定时器并不具备锁存功能,所以在定时器低8位溢出进位和低16位溢出进位时,会给计时造成很大的误差。

【发明内容】

[0004]本发明的目的在于克服现有技术的上述缺陷,提供一种51单片机高精度计时方法,该方法采用了连续读取定时器和适当屏蔽定时器的方法,解决了定时器低8位溢出进位和低16位溢出进位造成的计时误差,实现了 51单片机的高精度计时,且方法简单、易于实现。
[0005]本发明的上述目的主要是通过如下技术方案予以实现的:
[0006]一种51单片机高精度计时方法,运行在16位模式,包括如下步骤:
[0007](I)、屏蔽51单片机的定时器O ;
[0008](2)、读取定时器O中的低8位和高8位数值,得到定时器O中寄存器的值Count I,第二次读取定时器O中的低8位和高8位数值,得到定时器O中寄存器的值Count2 ;
[0009](3)、判断当前定时器O是否有溢出,如果没有溢出,进入步骤(4),如果有溢出,重复步骤(2 )后直接进入步骤(4 );
[0010](4)、如果Countl〈Count2,则Countl没有发生反转,进入步骤(5);如果Countl≥Count2,则Countl发生了反转,将Countl减去低8位的最大值,再进入步骤(5);
[0011](5)、如果在步骤(3)时没有发生定时器O溢出,则最终51单片机的时间计数=中断累加次数X低16位的最大值+Countl ;如果在步骤(3)时发生定时器O溢出,则最终51单片机的时间计数=(中断累加次数+1) X低16位的最大值+Countl ;
[0012](6)、允许响应定时器O中断,结束计时。
[0013]在上述51单片机高精度计时方法中,步骤(3)中判断当前定时器O是否有溢出是通过定时器O溢出标志位进行判断的。
[0014]本发明与现有技术相比具有如下有益效果:
[0015](I)本发明采用了连续读取定时器和适当屏蔽定时器的方法,其中:一、连续两次读取定时器的数值,解决了定时器低8位溢出进位造成的计时误差;二、适当屏蔽定时器并配合读取定时器溢出标志位,解决了定时器低16位溢出进位造成的计时误差,实现了 51单片机的高精度计时;
[0016](2)本发明方法仅需要51单片中的定时器即可实现,不需要外围复杂的计时电路,具有相对较低的成本,且方法简单,易于实现,具有较强的实用性;
[0017](3)本发明使用低成本的51单片机实现高精度的计时功能,应用前景十分广阔,因为高精度的计时是许多控制方案得以实现的基础,所以本发明高精度的计时方法可广泛应用在航天、航空、工业制造等多个领域;
[0018](4)试验表明:本发明51单片机高精度计时方法使得系统的时间性能明显提升,例如以16M主频,12分频的80C32为例,计时误差可控制在2.25us以内,并最终将系统总误差控制在20us以内。
【专利附图】

【附图说明】
[0019]图1为本发明51单片机高精度计时方法实现流程图。
【具体实施方式】
[0020]下面结合附图和具体实施例对本发明作进一步详细的描述:
[0021]以16M主频,12分频的51单片机(80C32)的定时器O为计时所用的定时器,并将其设为16位定时器,本发明具体的计时方法如下:
[0022]步骤(一)、屏蔽51单片机的定时器O。
[0023]可以选择直接屏蔽51单片机的定时器0,或者如果在比定时器O优先级更高的情况下无需屏蔽定时器O。这样做的目的是为了在整个计时过程中不被定时器O中断,而造成不确定的中断次数累加。
[0024]步骤(二)、读取定时器O中的低8位和高8位数值,得到定时器O中寄存器的值Count 1,第二次读取定时器O中的低8位和高8位数值,得到定时器O中寄存器的值Count2。
[0025]步骤(三)、判断当前定时器O是否有溢出,如果没有溢出,直接到步骤(四),如果有溢出,重复步骤(二)后直接进入步骤(四)。这样操作的目的是在定时器O有溢出时,刚开始记录的Countl、Count2就不可信了,因为定时器O寄存器的过零反转可能发生在读取CountU Count2的过程中,而整个计时过程远小于49ms,不会在一次计时过程中发生两次定时器O溢出,所以重复步骤(二),读取可信的Countl、Count2。
[0026]判断当前定时器O是否有溢出是通过判断定时器溢出标志位进行判断的。
[0027]步骤(四)、如果Countl〈Count2,则Countl没有发生反转,进入步骤(五);如果Countl≥Count2,则Countl发生了反转,将Countl减去255,再进入步骤(五);
[0028]读取Countl和Count2的时间间隔大约为4~8us,而寄存器低8位过零反转以次需要191us (计数值为255),所以Countl和Count2最多只有一个低8位发生过零反转,又因为寄存器低8位过零反转会使读取寄存器的数值多出255,因此当读取Countl和Count2均无反转或读取Count2有反转时,都会有Countl〈Count2, Countl就为可信的,但如果Countl≥Count2时,说明读取Countl发生了反转,这是需要将Countl减去255 (即CountI=Count 1-255)作为可信的值。[0029]步骤(五)、如果在步骤(三)时没有发生定时器O溢出,则最终51单片机的时间计数=中断累加次数X65535+Countl ;如果在步骤(三)时发生定时器O溢出,则最终51单片机的时间计数=(中断累加次数+1) X65535+Countl。这样做的目的是因为计时开始就屏蔽了定时器0,使得原本在定时器O溢出时进行的中断次数累加没有发生。
[0030]步骤(六)、允许响应定时器O中断,结束计时。
[0031]本实施例中通过采用上述方法进行高精度计时,使得系统的时间性能明显提升,计时误差可控制在2.25us以内,并最终将系统总误差控制在20us以内。
[0032]若采用传统计时方法,以16M主频,12分频的80C32为例,并将定时器设为16位定时器,低8位溢出进位和低16位溢出进位会给计时造成较大的误差,分别为200us和49.15ms (us表示微妙,ms表示毫秒),无法完成高精度计时,
[0033]本发明通过采用连续读取定时器和适当屏蔽定时器的方法。其中:一、连续两次读取定时器的数值,解决了定时器低8位溢出进位造成的计时误差;二、适当屏蔽定时器并配合读取定时器溢出标志位,解决了定时器低16位溢出进位造成的计时误差。
[0034]以上所述,仅为本发明最佳的【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本【技术领域】的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
[0035]本发明说明书中未作详细描述的内容属于本领域专业技术人员的公知技术。
【权利要求】
1.一种51单片机高精度计时方法,其特征在于:包括如下步骤: (1)、屏蔽51单片机的定时器O; (2)、读取定时器O中的低8位和高8位数值,得到定时器O中寄存器的值Countl,第二次读取定时器O中的低8位和高8位数值,得到定时器O中寄存器的值Count2 ; (3)、判断当前定时器O是否有溢出,如果没有溢出,进入步骤(4),如果有溢出,重复步骤(2)后直接进入步骤(4); (4)、如果Countl〈Count2,则Countl没有发生反转,进入步骤(5);如果Countl≥Count2,则Countl发生了反转,将Countl减去低8位的最大值,再进入步骤(5); (5)、如果在步骤(3)时没有发生定时器O溢出,则最终51单片机的时间计数=中断累加次数X低16位的最大值+Countl ;如果在步骤(3)时发生定时器O溢出,则最终51单片机的时间计数=(中断累加次数+1) X低16位的最大值+Countl ; (6)、允许响应定时器O中断,结束计时。
2.根据权利要求1所述的一种51单片机高精度计时方法,其特征在于:所述步骤(3)中判断当前定时 器O是否有溢出是通过定时器O溢出标志位进行判断的。
【文档编号】G04F10/00GK103605279SQ201310487916
【公开日】2014年2月26日 申请日期:2013年10月17日 优先权日:2013年10月17日
【发明者】牛和明, 陈朝晖, 刘端, 杨俊春, 王晶, 李昊然, 刘建军 申请人:北京控制工程研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1