原创 单片机定时器中断时间误差的分析及补偿

2009-8-13 08:47 1359 7 7 分类: MCU/ 嵌入式

来源 CEPARK网站http://www.cepark.com/Index.html  作者: hnrain


摘要:本文分析了单片机定时器溢出中断与CPU响应中断的时间误差,并给出了补偿误差的方法和实例。
6f-BC*V8Q)g H/M0关键词:单片机;  定时器;  中断;  误差电子园51单片机学习网#rD rQ[ H~


电子园51单片机学习网j acLOe uBi%R


1  前言
NwA6h._0TX;g9t0
    单片机内部一般有若干个定时器。如8051单片机内部有定时器0和定时器1。在定时器计数溢出时,便向CPU发出中断请求。当CPU正在执行某指令或某中断服务程序时,它响应定时器溢出中断往往延迟一段时间。这种延时虽对单片机低频控制系统影响甚微,但对单片机高频控制系统的实时控制精度却有较大的影响,有时还可能造成控制事故。为扩大单片机的应用范围,本文介绍它的定时器溢出中断与CPU响应中断的时间误差、补偿误差的方法和实例。电子园51单片机学习网]6RNDI0?I


G B*YE*W02  误差原因、大小及特点电子园51单片机学习网Ah)f(a Wj
    产生单片机定时器溢出中断与CPU响应中断的时间误差有两个原因。一是定时器溢出中断信号时,CPU正在执行某指令;二是定时器溢出中断信号时,CPU正在执行某中断服务程序。电子园51单片机学习网"bT0jCEg+B


y Cy E.g{o7E0 电子园51单片机学习网n {!x$e C6Y]{ Z_
2.1. CPU正在执行某指令时的误差及大小电子园51单片机学习网KL Z)S DL1x;M
    由于CPU正在执行某指令,因此它不能及时响应定时器的溢出中断。当CPU执行此指令后再响应中断所延迟的最长时间为该指令的指令周期,即误差的最大值为执行该指令所需的时间。由于各指令都有对应的指令周期,因此这种误差将因CPU正在执行指令的不同而不同。如定时器溢出中断时,CPU正在执行指令MOV  A, Rn,其最大误差为1个机器周期。而执行指令MOV  Rn,  direct时,其最大误差为2个机器周期。当CPU正在执行乘法 或除法指令 时,最大时间误差可达4个机器周期。在8051单片机指令系统中,多数指令的指令周期为1~2个机器周期,因此最大时间误差一般为1~2个机器周期。若振荡器振荡频率为fosc,CPU正在执行指令的机器周期数为Ci,则最大时间误差为Δtmax1=12/fosc×Ci(us)。例如fosc=12MHZ,CPU正在执行乘法指令(Ci=4),此时的最大时间误差为:电子园51单片机学习网p-w.z,nk"r4E:f
Δtmax1=12/fosc×Ci=12/(12×106)×4=4×10-6(s)=4(μs)电子园51单片机学习网o7V`-^Ytn3~%C)mU


bv#^Nr|B02.2 CPU正在执行某中断服务的程序时的误差及大小电子园51单片机学习网?| }~N t~4H
    定时器溢出中断信号时,若CPU正在执行同级或高优先级中断服务程序,则它仍需继续执行这些程序,不能及时响应定时器的溢出中断请求,其延迟时间由中断转移指令周期T1、中断服务程序执行时间T2、中断返回指令的指令周期T3及中断返回原断点后执行下一条指令周期T4(如乘法指令)组成。中断转移指令和中断返回指令的指令周期都分别为2个机器周期。中断服务程序的执行时间为该程序所含指令的指令周期的总和。因此,最大时间误差Δtmax2为:电子园51单片机学习网Y"zev4G(V
Δtmax2=(T1+T2+T3+T4)12/fosc=(2+T2+2+4)12/ fosc=12(T2+8)/ fosc
S3c ReaB4K0    若设fosc=12MHZ,则最大时间误差为:
6g]2Y |6h0Δtmax2=12(T2+8)/ fosc =12(T2+8)/12×106=(T2+8)×10-6(s)=T2+8(μs)。
!G?3z)I@4P!X0    由于上式中T2一般大于8,因此,这种时间误差一般取决于正在执行的中断服务程序。当CPU正在执行中断返回指令RETI、或正在读写IE或IP指令时,这种误差在5个机器周期内。电子园51单片机学习网p^ t-Kh Q9k
2.3 误差非固定性特点电子园51单片机学习网y5dm$O0|-`\|
    定时器溢出中断与CPU响应中断的时间误差具有非固定性特点。即这种误差因CPU正在执行指令的不同而有相当大的差异。如CPU正在执行某中断服务程序,这种误差将远远大于执行一条指令时的误差。后者误差可能是前者误差的几倍、几十倍、甚至更大。如同样只执行一条指令,这种误差也有较大的差别。如执行乘法指令MUL AB 比执行MOV  A, Rn指令的时间误差增加了3个机器周期。这种误差的非固定不仅给误差分析带来不便,同时也给误差补偿带来困难。


)LfxU+I?@0 电子园51单片机学习网$^?%F#FJ%k


3 误差补偿方法
Hp [1L'n x2B3e0
    由于定时器产生溢出中断与CPU响应中断请求的时间误差具有非固定性,因此,这种误差很难用常规方法补偿。为此,本文介绍一种新方法。现介绍该方法的基本思路、定时器新初值及应用情况。电子园51单片机学习网c;R T u;l4H8@f+o"D
3.1 基本思路电子园51单片机学习网O.d8m@a
    为使定时器溢出中断与CPU响应中断实现同步,该方法针对中断响应与中断请求的时间误差,对定时器原有的计数初值进行修改,以延长定时器计数时间,从而补偿误差。在该方法中,当定时器溢出中断得到响应后,即停止定时器的计数,并读出计数值。该计数值是定时器溢出后,重新从OOH开始每个机器周期继续加1所计的值。然后,将这个值与定时器的停止计数时间求和。若在定时器原计数初值中减去这个和形成新计数初值,则定时器能在新计数初值下使溢出中断与CPU响应中断实现同步,从而达到误差的补偿要求。电子园51单片机学习网^2B {"r^)Z9EH
3.2 定时器新计数初值
5j~r9[v'@)c}/[0
    若定时器为计数方式,操作方式为1,则计数器初值X0=216-t0×fosc/12。式中fosc为振荡器的振荡频率。t0为需要定时的时间,也为中断的间隔时间。X0为定时器原计数初值。在对定时器溢出中断与CPU响应中断时间误差进行补偿时,定时器的新计数初值X1为:
G-O.G4r-jhx0X1=216-t3× fosc/12
Z*B5u7z$Uhp,g0t3=t0+t1+t2
+@*Av:l!B.Z9k ?0    式中t0为中断间隔时间。t1为定时器停止计数时间,该时间为定时器停止计数到重新启动计数之间所有程序指令周期数的总和。t2为定时器溢出中断后,重新从OOH开始直至计数器停止时计的值。在误差补偿中,若将定时器计数初值X1取代X0,则可使定时器下次的溢出中断与CPU响应中断实现同步。电子园51单片机学习网Wg;R3Fe+xi.J4}
3.3 实例电子园51单片机学习网 L n C| fIj)B:f
    要求补偿定时器每1ms产生一次溢出中断时的中断响应延迟的误差。若振荡器振荡频率fosc=12MHZ,定时器工作在计数方式,工作模式为1,则补偿中断响应时间误差时的定时器新初值X1为:电子园51单片机学习网jP-c:e F
    X1=216-t3× fosc/12=216-(t0+ t1)- t2=216-(1000+ 13)- t2
7lBO4rY-[%qo3t4Q0误差补偿程序为:
]u#H#k3X0……电子园51单片机学习网`yZM @:~H
0    CLR   EA                     ;关CPU中断电子园51单片机学习网'no@-TLi
1    CLR   TRi                     ;停止定时器计数电子园51单片机学习网%K2W:mcAA5s#T[$F
2    MOV   R0,  #OOH             ;R0清零
aL)CILiU6P_03    MOV   R0,  #LOW(216)       ;定时器最大计数值的低8位送R0电子园51单片机学习网E Y0?I|6XP-M
4    MOV   A,   R0
$H;I6Y!}D+qXLM{05    SUBB   A,   #LOW(1000+13)   ;216的低8位减去( t0+ t1)的低8位送累加器A
\ e]*} M8N*B06    SUBB   A,   TLi               ;216的低8位减去( t0+ t1+ t2)的低8位送TLi电子园51单片机学习网7[(rg8\ L8[W+P
7    MOV  TLi,   A                 电子园51单片机学习网%~UH8a0ai%A4o+y
8    MOV  R0,   #OOH              ;R0清零
4sb6]3V T7L09    MOV  R0,   #HIGH(216) ;216 的高8位送R0
3]u7H)O|010   MOV  A,    R0                       电子园51单片机学习网i}Bf8{8]
11   SUBB  A,    #HIGH(1000+13)  ;216的高8位减去( t0+ t1)的高8位送A
(S#p*K-Y4U}mpu012   SUBB  A,    THi      ;216的高8位减去( t0+ t1 +t2)的高8位送A电子园51单片机学习网;RM v1CL3v;{a`
13   MOV  THi,   A电子园51单片机学习网$M zlrSB@ A
14 SETB  TRi   ;重新启动定时器电子园51单片机学习网Utc"Pt}*JI
     ……电子园51单片机学习网6_&i!y8w2a7d
    在上式和上段程序中,由于fosc=12MHZ,中断间隔时间为1ms,因此t0的机器周期数为1000。由于第1条指令到第14条指令的指令周期的机器周期数之和为13,因此,t1为13个机器周期。CPU虽在执行第一条指令CLR  TRi 后停止定时器计数,但在TLi、THi中分别保存了t2的低位数据和高位数据。


*}V(I[IL{0 电子园51单片机学习网+q9cp+j` {*A*P


4 结束语
oF(sb8z0    由于本文介绍的误差补偿方法能对定时器溢出中断与CPU响应中断的非固定性时间误差进行有效补偿,因此,该方法对于提高高频控制系统实时控制精度和扩大单片机应用范围都有较高的实用价值。电子园51单片机学习网9QN3oT7U_


电子园51单片机学习网 b/CFp0^/r EW2jKs


参考文献电子园51单片机学习网5t | \{T%r0?&tc
[1]曹巧媛,单片机原理及应用,电子工业出版社,1997、5电子园51单片机学习网 I0S%UjU:k9M(G
[2]汪吉鹏等,微机原理及接口,高等教育出版社,2001、7电子园51单片机学习网E1? v G9~]}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条