background image
宏晶科技:www.MCU-Memory.com   Mobile:13922805190(姚永平)   Tel:0755-82948409    Fax: 0755-82944243
宏晶科技:专业单片机 / 存储器供应商   www.MCU-Memory.com   STC12C5410AD 系列 1T 8051 单片机中文指南
51
在实际应用中应注意的问题如下。
(1)定时 / 计数器的实时性
定时 / 计数器启动计数后,当计满回 0 溢出向主机请求中断处理,由内部硬件自动进行。但从回 0 溢
出请求中断到主机响应中断并作出处理存在时间延迟,且这种延时随中断请求时的现场环境的不同而不同,
一般需延时 3 个机器周期以上,这就给实时处理带来误差。大多数应用场合可忽略不计,但对某些要求实
时性苛刻的场合,应采用补偿措施。
这种由中断响应引起的时间延时,对定时 / 计数器工作于方式 0 或 1 而言有两种含义:一是由于中断
响应延时而引起的实时处理的误差;二是如需多次且连续不间断地定时 / 计数,由于中断响应延时,则在
中断服务程序中再置计数初值时已延误了若干个计数值而引起误差,特别是用于定时就更明显。
例如选用定时方式 1 设置系统时钟,由于上述原因就会产生实时误差。这种场合应采用动态补偿办法
以减少系统始终误差。所谓动态补偿,即在中断服务程序中对 THx、TLx 重新置计数初值时,应将 THx、TLx
从回 0 溢出又重新从 0 开始继续计数的值读出,并补偿到原计数初值中去进行重新设置。可考虑如下补偿方
法:
CLR
EA
; 禁 止 中 断
MOV
A,TLx
;读 TLx 中已计数值
ADD
A,#LOW
;LOW 为原低字节计数初值
MOV
TLx,A
;设置低字节计数初值
MOV
A,#HIGH
;原高字节计数初值送 A
ADDC A,THx
;高字节计数初值补偿
MOV
THx,A
;置高字节计数初值
SETB EA
;开中断
(2 )动态读取运行中的计数值
在动态读取运行中的定时 / 计数器的计数值时,如果不加注意,就可能出错。这是因为不可能在同一
时刻同时读取 THx 和 TLx 中的计数值。比如,先读 TLx 后读 THx,因为定时 / 计数器处于运行状态,在读 TLx
时尚未产生向 THx 进位,而在读 THx 前已产生进位,这时读得的 THx 就不对了;同样,先读 THx 后读 TLx 也
可能出错。
一种可避免读错的方法是:先读 THx,后读 TLx,将两次读得的 THx 进行比较;若两次读得的值相等,
则可确定读的值是正确的,否则重复上述过程,重复读得的值一般不会再错。此法的软件编程如下:
RDTM:   MOV  A,THx
;读取 T H x 存 A 中
   MOV  R0,TLx
;读取 TLx 存 R 0 中
   C J N E A ,T H x ,R D T M
    ;比较两次 T H x 值,若相等,则读得的值正
        ;确,程序往下执行,否则重读
  MOV   R 1 ,A
     ;将 THx 存于 R1 中