登录站点

用户名

密码

单片机定时器的应用与误差纠正

1已有 903 次阅读  2013-04-17 10:39   标签单片机  定时器 
摘 要:对MCS-51单片机定时器的原理与使用中的几个关键问题进行了讨论,给出定时器的使用方法与误差补偿方法,并给出了实现程序。%F3t?"b"JckUF/f@#b44606

9L!K#P7rLb^44606
3t O6v;g2[%^44606
"\H D"j8xX~^ Qz446061前言电子园51单片机学习网2F"?.fE5f[jy

电子园51单片机学习网oK;m"j"a:n/^K


9_Ag qSs8x44606       定时器是MCS-51单片机非常重要的组成部分,由于其应用与单片机的其他硬件相关,存在着一定的复杂性[1]。而定时器是单片机应用中解决某类复杂问题的最有为效的方法,应用非常广泛。随着定时要求的提高,在定时处理过程中所带来的误差需要校正[2],本文就MCS-51单片机的使用方法与误差校正方法进行了讨论,并给出通用算法与程序。

HKT;V:fNi*`#Gv44606 电子园51单片机学习网;w9c;d4\ So*e


6\ oG5U!z44606
7V]'y2K s'V'Aq1fj446062定时器工作方式与方式设置电子园51单片机学习网)p5D4? Z2_&S+n


3TPcfM W44606
.H9t ?)Gi&B44606        MCS-51单片机有两路独立的定时器,每路定时器有4种工作方式(0~3),方式0是13位计数结构,计数器由TH全部8位与TL的低5位构成;方式1是16位计数结构,计数器由TH与TL全部8位共16位组成;方式 2是8位计数结构方式,计数器由TL8位组成,与其他方式不同的是,当定时溢出时,硬件自动将TH的值装入TL中,有自动加载功能。前三种工作方式,两路定时器的设置与使用完全相同,但在工作方式3下,两路定时器有很大差别,只有0路定时器可以工作在方式3下,1路定时器只能工作在方式0~2下,在工作方式3下,0路定时器被拆分成两个独立的8位计数器TL0与TH1,其中0路定时器的各控制位和引脚信号全归TL0使用,因此TH0只能做简单的定时器使用,其控制位占用了1路定时器的控制位,如果0路定时器工作在方式3下,1路定时器由于让出了所属控制位,通常作为串行口波特率发生器。电子园51单片机学习网;br6lqI S;QM9q
电子园51单片机学习网!W"Bs R!K
      定时器的工作方式选择主要依靠设置TMOD寄存器的值,其各位定义如下: 电子园51单片机学习网4MS]gr VJ
位序 B7 B6 B5 B4 B3 B2 B1 B0
b-z`j2[ Zz;xC)?5`4u,S44606位符号 GATE C/T M1 M0 GATE C/T M1 M0电子园51单片机学习网7z JR B#\lS6p
其中,B0~B3用来控制0路定时器,B4~B7用来控制1路定时器。
A^ v\p@(p9V&b44606GATE位为门控位,主要确定定时器启动的方式,如果GATE=0,则用TR0(TR1)位启动/关闭定时器,如果GATE=1,则以外中断请求信号(INT0或INT1)启动定时器。
,L$zKs)W44606C/T位为定时与计数选择位,C/T=0为定时方式,C/T=1为计数方式。电子园51单片机学习网 c/Nx r |7~:L`
M0、M1为工作方式选择位
`SJdt'h8Z4P_44606M1M0=00方式0M1M0=10方式2电子园51单片机学习网Q.ZCuwg\~
M1M0=01方式1M1M0=11方式3
k$F:dU'D bQ:q5Jt2`44606选择定时器工作方式,应根据上述规定向寄存器TMOD中写入相应数,如设置0路定时器工作在定时方式0下,1路定时器工作在方式1下,则应用下列指令设置:
?_\ `K(ctC44606MOVTMOD,#10H

[:L,k$si^44606 电子园51单片机学习网y2W#aQ8n\

电子园51单片机学习网G5J&@7i/HF Xo
电子园51单片机学习网 E PeP'_5A
3定时器的处理方式与计数初值的计算电子园51单片机学习网0J2@(H`R1w4K&e

电子园51单片机学习网I;L{6V+X5f


g[nhOa*n44606        MCS -51单片机的定时器采用增值计数法,在定时工作方式下,启动定时器后,每机器周期CPU硬件会自动给相应计数器加1,直至超出对应计数器所能表示的最大值,发生定时溢出,硬件自动将TF0(TF1)置位,用户可以通过查询TF0(TF1)位判断定时是否溢出,如果此时定时中断处于开放状态,将引发相应定时中断,MCS-51响应中断,根据相应中断地址(0路定时中断的中断入口地址为000B,1路为001B)执行中断处理程序。电子园51单片机学习网U_QaqG^
        定时编程有两种基本方式,一种方式为查询方式,在启动定时时关闭相应定时中断,然后循环检测TF0(TF1)进行相应处理;另一种方式为中断方式,启动定时时开放相应定时中断,并将定时溢出处理程序编写为中断处理程序形式通过在相应中断入口地址(000B,001B)放置跳转指令转入定时溢出处理程序。电子园51单片机学习网ep,KJ}^9a'U
        定时器工作方式选定后,定时溢出时间唯一取决于计数器的初值,如何根据应用需要确定计数器初值,也是定时器应用的一个重要问题。假定单片机机器周期为K0,所选定的定时方式计数器为n位,所实现的定时时间长度为T,则有:
a\JP,a;r5FZ44606(2n-x)K0=T(1)
't,I i;n o:w*dfp44606其中x为计数器的初值,根据式1可以求出初值x为:
#CqSr CK4X44606x=2n-(T/K0)(2)

D/m{i3n'|T44606 电子园51单片机学习网-X'{gs ?7VS"}

电子园51单片机学习网hG$e f+Q&v
电子园51单片机学习网M0De'N;t#k
4定时器的编程步聚和各步聚的通用程序

a c,\*C.VD;@`44606

&Bma yw3o[yG44606电子园51单片机学习网;l2^N!mh{5M
定时器应用编程主要分为以下几个步聚。电子园51单片机学习网$?1R{ u Hv*s3N#H

7\9KX'a+chz44606步骤1:根据定时要求求计数初值x
]#sT V5^(MX44606首先根据单片机时钟频率f确定单片机机器周期k0,即:
9{#V T8l4` G44606k0=12/f(3)电子园51单片机学习网p kp`1`Me
在实际应用中,单片机时钟频率f一般为6mHz或12mHz,所以单片机机器周期k0=2μs或1μs,然后根据选定的工作方式确定计数器位数n,将所得k0与n代入式2,求出计数初值x,并根据所选择的计数方式将x的值分入TH0(TH1)与TL0(TL1)。电子园51单片机学习网k(L"@BY8O
电子园51单片机学习网a*`3`etB
步骤2:编写初始化程序
1o/r*mM+S4A%oV44606初始化程序与定时编程方式有关,中断方式初始化程序如下(以0路定时器为例):电子园51单片机学习网[*D I#^TZX
movTMOD,#n(规定定时工作方式)电子园51单片机学习网C9OW5v~pN\ Q0x
movTH0,#n1(设置计数器低位)电子园51单片机学习网2]{`8?%}9C${
movTL1,#n2(设置计数器高位)
+o Fz ?;|qB44606setBEA(开放中断)
+k*Kb2f }4Q"t44606setBET0(开放定时中断0)电子园51单片机学习网DlXRCKWC f
setBTR0(启动定时)电子园51单片机学习网9^2vTJTMb
查询方式初始化程序如下:
N-{!`)]u44606movTMOD,#n(规定定时工作方式)电子园51单片机学习网|&B&`"Ij
movTH0,#n1(设置计数器低位)
5Lut8Z#A'x44606movTL1,#n2(设置计数器高位)
0Gj,K(_t1Yz44606clrET0(开放定时中断0)电子园51单片机学习网0`}us@gd
setBTR0(启动定时)电子园51单片机学习网 @i%[-_jk+S
其中#n1和#n2与计数初值x有关,如果采用方式2,有#n1=#n2,所有初始化程序都以0路定时器为例,如果用1路定时器,则将程序中的寄存器和控制位的下标1改为0。
{;r].bP(NeX `44606电子园51单片机学习网*ACfs?i4b
步骤3:
编制定时处理程序电子园51单片机学习网 a!t iq(XFF#y
中断方式处理程序如下:电子园51单片机学习网DI5_F!SG7rhm
org000B
{V,}Zj&O446061jmpb1
;zq duh(VrY)pkXp44606b1:clrEA电子园51单片机学习网@6ol4d2J
movTH0,#n1
z1z:C$t YA9H!J44606movTH1,#n2
u { n6^._/plP2b(_/k44606定时处理语句段
4_\2F4jJ.A44606reti电子园51单片机学习网[ Xr ^_8lA
其中,0路定时器为000B,如果为1路定时器为001B,如果定时器工作在方式2,则不需要给TH0、TH1重新赋值。电子园51单片机学习网4Vm}*C\Tp&{,H${
查询方式处理程序如下:
]w&t+P!fKI2F44606L1:jbcTF0,LO1电子园51单片机学习网 ya `:u}n$W$Lj
sjmpL1
$d*o3e[Y*V?B2k+e1j/I44606LO1:movTH0,#n1
b,bi r8d44606movTH1,#n2电子园51单片机学习网(z%g%F z!}g:ZkI)n
定时处理语句段
7M ?9PFc f9u#]44606sjmpL1

-c5^8j:Zf)x44606

1t?[d&j44606电子园51单片机学习网T"r9X6\B `%Dn

n.zKx S2fE5O446065定时的误差校准

/@Xv7bn!@44606

Nxs Y1gV;Z44606
2y0h'J/OVNc44606        由于单片机的机器周期为1μs~2μs,定时误差一般应在0μs~20μs之内,对于一般应用,此误差可以忽略,但是对于精确度要求比较高的应用场合,此误差必须进行校正。定时误差是定时溢出后转入执行定时处理语句段之间所耗费的时间,此时间主要由定时溢出转入定时处理语句段所必须执行的指令或硬件过程产生。
H8R%x'k7B,n.Y44606        定时误差校准的简单原理是:在定时溢出响应后,停止定时器计数,读出当时计数值(它反映了定时响应的延迟时间),然后将完成这一任务的程序段执行时间考虑进去,作为修正因子校正定时初值,以下程序段以中断处理方式为例:电子园51单片机学习网6l| y?^@ }p-s
clrEA电子园51单片机学习网I,m6\ {,H0L$I:OM
clrTR1电子园51单片机学习网T0bo%H Yzbe_
clrc电子园51单片机学习网 m0Y;b g1Gm
movA,#n0电子园51单片机学习网bcu#@#Gc ~X
clrTR0电子园51单片机学习网,@Z$`n+t ^4M"qG
subbA,TL0电子园51单片机学习网-?v/|x J3o:ho?
subbA,#08
B;h!e}8s ~o0p!F44606movTL0,A
T~%cb&J't44606movA,#n1电子园51单片机学习网V_ wkmE^
subbA,TH0电子园51单片机学习网 ?&@d*x0_#JCM"ql|
movTH0,A
7j x c |4nP;zB44606setbTR0
0k Os#tr _*kd44606定时处理语句段
-rQ1?b#R44606reti电子园51单片机学习网}bl)o\h Ae
由于执行从指令clrTR0(停止计数)到指令setbTR0(重新开启计数)之间的指令需8个机器周期,应将此消耗考虑进去。上述程序将定时误差缩小在1个机器周期内。电子园51单片机学习网O_ Xh1P

上一篇: stm32应用例程 下一篇: 单片机破解的方法及应对策略

分享 举报

发表评论 评论 (2 个评论)

涂鸦板