研究与开发
2008 年第 3 期
34
用 C51 语言实现单片机
高精度定时的新算法
刘 帆
1
林育兹
1
戴玉珍
2
(1.厦门大学机电工程系,厦门 361005;2.上海电子信息职业技术学院,上海 201411)
摘要 为提高 8051 单片机定时精度,扩展 8051 系列单片机的用途,本文分析了 8051 系列单
片机定时器溢出中断与 CPU 响应中断的时间误差。在此基础上,提出了应用 C51 高级语言对多个
定时器进行精确定时的误差补偿方法,并且使用 Keil Uvision2 仿真调试软件搭建一段数字显示式
倒计时的实例程序,通过分析和调试误差补偿算法,使 8051 单片机在多个定时器同时使用的情况
下,定时误差最终小于 3 个机器周期,是目前 8051 单片机高精度定时的一种新算法。
关键词:单片机;定时器;中断误差;C51
A New Arithmetic to Improve the Multi-timer Timing
Accuracy by Using C51 Language with 8051 MCU
Liu Fan
1
Lin Yuzi
1
Dai Yuzhen
2
(1.Department of Electrical and Mechanical Engineering, Xiamen University, Xiamen 361005;
2. Shanghai Technical Institute of Electronics & Information, Shanghai 201411)
Abstract In order to improve the timing accuracy of 8051MCU and expand the purpose for the series
of 8051MCU, this paper analyzed the timing error between the timer interrupt overflow and interrupt
response of CPU. It gives the way of solving the multi-timer timing error by using C51 advanced language.
Besides it uses the simulate software —— Keil Uvision2 to build a Single chip control digital display of a
counting down program, through analyzing and debug the compensate counting of error, it finally makes the
error of timing for 8051MCU below 3 machine period in the condition of using the multi-timer timing.
Key words:8051 MCU;timer;timing error;C51
1 引言
对于 8051 系列单片机的定时应用已经有不少
讨论,有的利用汇编语言对其定时器的中断时间进
行误差补偿
[4]
,但该方法的系统编程繁琐,且开发
周期长等;有的利用 C51 程序实现 T0 的精确定时
[5]
,
但其算法仅适用于某些特定情况,且稳定性不高。
因此,本文针对单片机多个定时器同时使用的定时
误差进行分析,提出应用 C51 高级语言进行高精确
定时的新算法,以解决上述定时方法所存在的问题,
并给出了应用实例,具有一定的实用性。
2 定时误差产生的原因
产生定时误差的主要原因有:①定时器产生溢
出中断信号时,CPU 正在执行某指令;②定时器溢
出中断信号时,CPU 正在执行某中断服务程序。
2.1 定时器工作方式的分析
8051 单片机的 2 个定时/计数器,有方式 0~方
式 3 的 4 种工作方式。本文以最常用的定时方式 1
作讨论,其工作原理如图 1 所示。
由图 1 可知,单片机工作在方式 1 时,若定时/
计数值计满溢出后,则定时/计数器的初值将被置
零,并继续从 THx=0x00,TLx=0x00 开始计数。由
于定时初值不会被重新装入,所以需要利用程序重
新对 THx、TLx 赋值。但赋值操作需要占用一定时
间,如果不补偿,会造成下一次定时/计数溢出中断
信号的时间与理想值不符(即误差)。