51单片机定时器工作原理

发表时间:2020-09-26 09:28:43 人气:3064

51中的定时器和计数器是同一个硬件电路支持的,通过寄存器配置不同,就可以将他当做定时器或者计数器使用。

确切的说,定时器和计数器区别是致使他们背后的计数存储器加1的信号不同。当配置为定时器使用时,每经过1个机器周期,计数存储器的值就加1。而当配置为计数器时,每来一个负跳变信号(信号从P3.4 或者P3.5引脚输入),就加1,以此达到计数的目的。

标准51有2个定时器/计数器:T0和T1。他们的使用方法一致。52相比51多了一个T2。

时钟周期与机器周期


定时器的本质原理就是:每经过1个机器周期,计数存储器的值就加1。因此当使用定时器时,就必须掌握时钟周期和机器周期的关系。

时钟周期 :晶振频率的倒数。如果使用的是11.0592M的晶振,那么就是 1 / (11.0592x10^6) 秒   

注:1MHz = 10^6Hz

机器周期 :标准51下,机器周期 =12倍的时钟周期。即:12 / (11.0592x10^6) 秒 。有的增强51单片机,1个机器周期等于4倍的时钟周期,还有的更短。

计数存储寄存器THx&TLx

定时器和计数器工作,都依赖于 计数。计数则是由计数存储器THx和TLx这2个8位寄存器完成的。

对于计数器,每来一个负跳变信号(信号从P3.4 或者P3.5引脚输入),就加1,以此达到计数的目的。

对于定时器,每隔1个机器周期 加 1,假如(只是假如)一个机器周期为 1ms , 当加到1000次时,我们就认为经过了1s,这就是定时器定时依据。

若TH0 和 TL0 以 16位 模式工作,那它的计数范围为   [0 , 65535 ]  ,  也就是累加 65536次发生溢出。 每累加一次是  12 / (11.0592x10^6) 秒。

那么从 0 累加到溢出 历时  ≈ 0.071s = 71ms 。

可以延时 10的整数倍ms,这样就避免了误差,以便用倍数控制更长的延时时间。所以,我么要给 TH0 和  TL0赋一个初始值,使他们的溢出周期(TH0,TL0从初始值到溢出所用的时间)减少到 10ms。

就像一个瓶子,开始装了2/3,再来就只能装1/3就溢出了。通过比例式计算:

12 / (11.0592x10^6) s       -----     1   次

10x 10-3   s                        ------          x  次         (求出 x = 9216次 ,计数9216次后溢出)

65536 - 9216 = 56320  =  二进制( 11011100   00000000)

也就是  TH0 = 11011100 , TL0 = 00000000

工作模式寄存器TMOD

通过TMOD来配置T0和T1的工作模式。

注意,TMOD寄存器不可位寻址(例如sbit led = P0^0 就是P0寄存器位寻址的例子),因此对它的配置需要对这个8bit寄存器整体赋值。

注:51中有些特殊功能寄存器不支持位寻址。只有寄存器的地址值能够被8整除的(即以数字0或者8结尾的地址,如0xA8, 0xD0),才能支持位寻址。不支持位寻址的,只能整体赋值。


小技巧:在对寄存器整体赋值时,要注意只修改我们想修改的位而不影响其它无关位的值,避免影响了之前对这个寄存器的配置。

TMOD |= 0x01;   //仅仅修改TMOD的最低位,其他位保持不变。


C/T:计数器,定时器功能选择位。 1为计数器模式, 0 为定时器模式。

M0和M1:


解释说明:

②处 C/T = 0 表示为定时器模式,触发信号为①处的单片机内部时钟信号。(若②处CT = 1,则触发信号为Tn脚)

③处表明,信号能触发使加法计数器加1,还得受④处控制。不然时钟信号是不能让加法计数器累加的。 ④处这个是与门,所以TRx(TR0和TR1)必须为1,表明我们要开启定时器。同时当,GATE为0,通过非门后为1,再通过或门,也是1,那么就让③处控制起来了。若GATE为1,那么,定时器的启动停止受 TRx和 INTx 共同控制。 INTx脚为1且TRx为1才能启动定时器/计数器。

于是在一般情况下使用定时器,我们需要如下配置:

TRx    为  1

GATE  为 0

INTx   任意

控制寄存器TCON

控制寄存器就是用来控制定时器/计数器 启动和停止的,以及溢出标志位的查询和修改。TFx是计数存储器溢出标志位,只要一溢出,就马上置为1。


TF1:定时器/计数器1的溢出标志位。1表示计数存储器溢出,0表示计数存储器正常计数。

此文关键字: 单片机