你的位置:首页 > 知识课堂 > 正文

51单片机的定时器

发布时间:2012-12-12

51单片机的定时器/计数器概念

51单片机中的定时器和计数器其实是同一个物理的电子元件,只不过计数器记录的是单片机外部发生的事情(接受的是外部脉冲),而定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单片机上连接的晶振部件。

51单片机的定时器有4种模式,每种模式的定时的计算是不同的,不是像百度上面那些网友回答问题的时候说的那样一个公式就可以搞定。

模式0 :通常不使用,工作的方式和模式已与模式二相同,不过只有TL05位)TH0(8)工作,一般定时都使用模式一。

模式一:定时t=2^16-初值)*振荡周期*12;初值就是装入定时器的初值,振荡周期就是晶振的倒数。

模式二:定时t=(2^8-初值)*振荡周期*12

模式三:模式三对定时器0与定时器1不太一样,T0设置为模式三时,TH0TL0被分成两个八位计数器;TL0和模式一相同使用原T0的各个控制位,引脚,中断源;TH0只能够作为定时功能。

MCS-51单片机的晶振经过12分频之后提供给单片机的只有1MHZ的稳定脉冲;晶振的频率是非常准确的,所以单片机的计数脉冲之间的时间间隔也是非常准确的,这个准确的时间间隔是1微秒;

MCS-51单片机外接的是12MHZ的晶振(实际上是11.0592MHZ),所以,MCS-51单片机内部的工作频率(时钟脉冲频率)12MHZ/12=1MHZ=1000000/=1000000条指令/=1000000/1000000微秒=1/微秒=1条指令/微秒;也就是说,晶振振荡一次,就会给单片机提供一个时钟脉冲,花费的时间是1微秒,此时,CPU会执行一条指令,经历一个机器周期;:1个时钟脉冲=1个机器周期=1微秒=1条指令;

:个人PC机上的CPU主频是晶振经过倍频之后的频率,这一点恰好与MCS-51单片机的相反,MCS-51单片机的主频是晶振经过分频之后的频率;

总之:MCS-51单片机中的时间概念就是通过计数脉冲的个数来测量出来的;1个脉冲=1微秒=1条指令=1个机器周期;

51单片机的定时器
二、定时器
/计数器的结构

8051单片机的两个定时器T0T1分别都由两个特殊功能寄存器组成;T0由特殊功能寄存器TH0TL0构成,T1则是由TH1TL1构成;

作为定时器使用时,定时器计数8051单片机片内振荡器输出经过12分频后的脉冲个数,:每个机器周期使定时器T0/T1的寄存器值自动累加1,直到溢出,溢出后继续从0开始循环计数;所以,定时器的分辨率是时钟振荡频率的1/12;

作为计数器使用时,通过引脚T0(P3.4)T1(P3.5)对外部脉冲信号进行计数,当输入的外部脉冲信号发生从10的负跳变时,计数器的值就自动加1;计数器的最高频率一般是时钟振荡频率的1/24;

由此可知,不论是定时器还是计数器工作方式,定时器T0T1均不占用CPU的时间,除非定时器/计数器T0T1溢出,才可能引起CPU中断,转而去执行中断处理程序;所以说,定时器/计数器是单片机中效率高而工作灵活的部件;

三、定时器/计数器的工作模式

除了可选择定时器和计数器的这两种工作方式外,每个定时器/计数器都有4种工作模式;

在模式012,T0T1的工作模式相同;在模式3,两个定时器/计数器的工作模式不同;

工作模式0:

TL0的低5位和TH0的全部8位共同构成一个13位的定时器/计数器;定时器/计数器启动后,定时或计数脉冲个数加到TL0,从预先设置的初值(时间常数)开始累加,不断递增1; TL0计满后,TH0进位,直到13位寄存器计满溢出;溢出时,定时器/计数器硬件会自动地把13位的寄存器值清0,中断标记TF01;如果需要进一步定时/计数,需要使用相关指令重置时间常数,并把定时器/计数器的中断标记TF00;工作模式0的结构如下图:

工作模式1:

模式1与模式0几乎完全相同,唯一的区别就是,模式1中的寄存器TH0TL0共同构成的是一个16位定时器/计数器来参与操作,因此比模式0中的定时/计数范围更大。

工作模式2:

这种模式又称为自动再装入预置数模式;当定时器/计数器的寄存器TH0/TL0的值溢出时,定时器/计数器硬件设备会自动把寄存器TH0/TL0的值清0,以重新开始操作;但是有时候,我们的定时/计数操作是需要多次重复定时/计数的,如果溢出时不做任何处理,那么,在第二轮定时/计数时就是从0开始定时/计数了,而这并不是我们想要的;所以,要保证每次溢出之后,在重新开始定时/计数的操作是我们想要的,那就要把预置数(时间常数)重新装入某个地方;而重新装入预置数的操作是硬件设备自动完成的,不需要人工干预所以,这种工作模式就叫自动再装入预置数方式;既然需要重新装入预置数,那么预置数就必须要存放在某个地方,才能保证重装操作成功;在工作模式2,把自动重装入的预置数存放在定时器/计数器的寄存器的高8位中,也就是存放在TH0,而只留下TL0参与定时/计数操作;显然,定时/计数的方位小了很多;

:这个工作模式常用于波特率发生器(串口通讯),T1工作在串口模式2;用于这种方式时,定时器就是为了提供一个时间基准;计数溢出之后,不需要做太多的事情,只做一件事就可以,就是重新装入预置数,再开始重新计数,而且中间不需要任何延时。

工作模式3:

由于定时器/计数器T1没有工作模式3,如果把定时器/计数器T0设置为工作模式3,那么TL0TH0将被分割成两个相互独立的8位定时器/计数器。

四、定时器/计数器的定时/计数范围

工作方式0——13位定时器 / 计数器 工作 模式,最多可计数213次方 ,:8192,[0,8191];

工作方式1——16位定时器/计数器 工作 模式,最多可计数216次方 ,:65536,[0,65535];

工作方式2——8位定时器/计数器工作模式,计算次数最多为2^8,256,[0,255];

工作方式3——

 

关闭

 

关闭