8051定时器认识
时钟周期 :时钟周期 T 是时序中最小的时间单位,具体计算的方法就是 1/时钟源频率。晶振是 12MHz,那么对于我们这个单片机系统来说,时钟周期=1/12000000 秒.
机器周期 :我们的单片机完成一个操作的最短时间。机器周期主要针对汇编语言 而言,在汇编语言下程序的每一条语句执行所使用的时间 都是机器周期的整数倍,而且语句占用的时间是可以计算出来的,而 C 语言一条语句的时间是不确定的 ,受到诸多因素的影响。51单片机系列,在其标准架构下一个机器周期是 12 个时钟周期 ,也就是 12/12000000 秒。(1us)
定时器 和计数器 是单片机内部的同一个模块,通过配置 SFR(特殊功能寄存器)可以实现两种不同的功能,我们大多数情况下是使用定时器功能。定时器内部有一个寄存器,我们让它开始计数后,这个寄存器的值每经过一个机器周期就会自动加 1 ,因此,我们可以把机器周期理解为定时器的计数周期。这个定时器就是每过一个机器周期的时间,也就是 12/12000000 秒,数字自动加 1。
定时器有多种工作模式,分别使用不同的位宽(指使用多少个二进制位),假如是 16 位的定时器,也就是 2 个字节,最大值就是 65535,那么加到 65535 后,再加 1 (65536)后就算溢出,如果有其他位数的话,道理是一样的,对于 51 单片机来说,溢出后,这个值会直接变成 0。从某一个初始值开始,经过确定的时间后溢出,这个过程就是定时的含义。
定时值存储寄存器:
名称
描述
SFR地址
复位值
TH0
定时器 0 高字节
0x8C
0x00
TL0
定时器 0 低字节
0x8A
0x00
TH1
定时器 1 高字节
0x8D
0x00
TL1
定时器 1低字节
0x8B
0x00
TCON——定时器控制寄存器的位分配(地址 0x88、可位寻址)
位
7
6
5
4
3
2
1
0
符号
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
复位值
0
0
0
0
0
0
0
0
TCON——定时器控制寄存器的位描述
TF1 :定时器/计数器T1溢出标志 ,溢出时由硬件置1,直到CPU响应中断才由硬件置0,也可以用程序去软件置0.,即清零有两种方式:软件清零 ,或者进入定时器中断时硬件清零 。
TR1 :定时器T1的运行控制位,软件置1/清零 来进行启动/停止 定时器。
TF0 :定时器/计数器T0溢出标志,溢出时由硬件置1,直到CPU响应中断才由硬件置0,也可以用程序去软件置0.,即清零有两种方式:软件清零,或者进入定时器中断时硬件清零。
TR0 :定时器T0的运行控制位,软件置1/清零来进行启动/停止定时器。
IE1 :外部中断1请求源(INT1/P3^3)标志,IE1=1,外部中断向CPU请求中断,当响应中断时由硬件清0 IE1.
IT1 :外部中断触发方式控制位,IT1=0,低电平触发;IT1=1,"1"-->"0"下降沿跳变触发.
IE0 :外部中断1请求源(IN01/P3^2)标志,IE0=1,外部中断向CPU请求中断,当响应中断时由硬件清0 IE0.
IT0 :外部中断触发方式控制位,IT0=0,低电平触发;IT0=1,"1"-->"0"下降沿跳变触发.
TMOD——定时器模式寄存器的位分配(地址 0x89、不可位寻址)
位
7
6
5
4
3
2
1
0
符号
GATE
C/T
M1
M0
GATE
C/T
M1
M0
定时器
定时器T1
定时器T0
复位值
0
0
0
0
0
0
0
0
TMOD——定时器模式寄存器的位描述
GATE :门控制 。GATE=0时,仅由TRx来控制定时器/计时器的开启;GATE=1时,由TRx和INTx脚为高时才可控制定时器/计时器的开启,用于计算外部中断"1"-->"0"下降沿跳变的次数, 常用来测量外部信号脉冲宽度。
C/T :C/T=0;选择定时器模式;C/T=1;选择计时器模式;
M1/M0:选择定时器/计数器的工作模式,如下表:
M1
M0
工作模式
0
0
模式0:13位定时/计数器,THn(8位),TLn(5位)。
0
1
模式1:16位定时/计数器,THn(8位),TLn(8位)。
1
0
模式2:8位初值自动重装定时/计数器,溢出后THn重装到TLn。
1
1
模式3:禁用定时器 1,定时器 0 变成 2 个 8 位定时器。
“可位寻址”,比如 TCON 有一个位叫 TR1,我们可以在程序中直接进行 TR1 = 1 这样的操作。“不可位寻址”,如对TMOD 里的位M1 = 1 这样的操作就是错误的。我们要操作就必须一次操作这整个字节,也就是必须一次性对 TMOD 所有位操作,不能对其中某一位单独进行操作。
模式1讲解
16位定时/计数器,THn(8位),TLn(8位)
16位定时/计数器,THn(8位),TLn(8位)
SYSclk和OSC 表示时钟频率,因为 1 个机器周期等于 12 个时钟周期,所以那个 d 就等于 12。下边 GATE 右边的那个门是一个非门电路,再右侧是一个或门,再往右是一个与门电路。
图上可以看出来,下边部分电路是控制了上边部分。
1.如果要让定时器0工作,那么 TR0 就必须置 1,及与门另一输入为1。
2.当 GATE = 1 时,非门后变成 0,那 INT0 脚必须是 1 ,经过或门电路后才为 1,这时定时器才会工作,而 INT0 引脚是为0 时,定时器不工作,这就是 GATE 位的作用。
3、当 GATE = 0 时,非门后变成 1,不管 INT0 引脚是什么电平,经过或门电路后都肯定是 1,定时器就会工作。
4、要想让定时器工作,就是自动加 1,从图上看有两种方式,第一种方式是 C/T = 0 的时候,一个机器周期 TL 就会加 1 一次,当开关打到下边时,即 C/T =1 的时候,T0 引脚即 P3.4 引脚来一个脉冲,TL 就加 1 一次,这也就是计数器功能。
定时器配置步骤:(查询法)
第一步:设置特殊功能寄存器 TMOD ,配置好工作模式 。
第二步:设置计数寄存器 TH0 和 TL0 的初值 。
第三步:设置 TCON,通过 TR0 置 1 来启动定时器。
第四步:判断 TCON 寄存器的 TF0 位,监测定时器溢出情况(查询法 )
定时器配置步骤:(中断法)
第一步:打开总中断,EA=1;
第二步:设置特殊功能寄存器 TMOD ,配置好工作模式 。
第三步:设置计数寄存器 TH0 和 TL0 的初值 。
第四步:使能定时器0中断,ET0=1。
第五步:设置 TCON,通过 TR0 置 1 来启动定时器。
第六步:编写中断服务函数,重新赋初值。
如何用定时器定时时间?
晶振是 12MHz,时钟周期就是 1/12000000,机器周期是 12/12000000,假如要定时 1ms,就是 0.001 秒,要经过x 个机器周期得到 0.001 秒,我们来算一下 x*12/12000000=0.001,得到 x= 1000。16 位定时器的溢出值是 65536(因 65535 再加 1 才是溢出),于是我们就可以这样操作,先给 TH0 和 TL0一个初始值,让它们经过 1000 个机器周期后刚好达到 65536,也就是溢出,溢出后可以通过检测 TF0 的值得知,就刚好是 0.001秒。那么初值 y = 65536 - 1000 = 64536,转成 16 进制就是 0xFC18,也就是 TH0 = 0xFC,TL0 = 0x18。
8051定时器计数器
定时器/计数器是一种计数装置,若对内部时钟脉冲计数,可视为定时器;若对外部时钟脉冲计数,可视为计数器。
定时器/计数器的应用可以采用中断的方式当定时或计数达到时产生中断,另外也可以采用询问的方式,不断询问计数状态,以控制程序流程。
8051计数寄存器是THx和TLx两个8位的寄存器,x=1或x=0。
8051的定时器/计数器
8051单片机有2个16位定时器/计数器:定时器0(Timer0)和定时器1(Timer1)简称T0和T1,8052在包含了T0、T1还有一个Timer 2(T2)。这三个定时器/计数器都可作为内部定时器或外部计数器。
若是作为内部定时器时,是计数内部的脉冲。以12MHz的计数时钟脉冲系统为例,将12MHz/12送入定时器,此时定时器所计数的脉冲周期为1us。若采用16位的定时模式,则最多可计数65536个脉冲(即2^16),约0.0655s。
若作为外部计数器时,则是计数由T0或T1引脚送入的脉冲。同样的,若采用16位的定时模式,最多可计数65536(即2^16)个计数量。
定时器/计数器模式寄存器TMOD
定时器/计数器模式寄存器TMOD主要设定定时器/计数器的工作模式、计数信号来源及启动方式等。
TMOD模式寄存器的低四位T0(0-3)配置定时器/计数器0(Timer0)的工作模式,高四位T1(4-7)配置定时器/计数器1(Timer1)的工作模式,这两部分的结构类似,只是控制的对象不同。
我们以高四位为例来了解TMOD模式寄存器的使用,即使用T 1,(T0一样的用法):
GATE为Timer的门控开关,用来决定Timer 1(T 1)的启动方式。
若GATE = 0,则只要 TR1 = 1,即可启动Timer 1,称为内部启动或软件启动;
若GATE = 1,则需要 TR1 = 1,还要等待外部中断引脚INT1为高电平,Timer 1才能启动工作,称为外部启动或硬件启动。
C/T(Count/Timer)定时器/计数器切换开关:C/T=0为内部定时器,用来计数OSC/12的脉冲;C/T=1为外部计数模式,用来计数由T 1(P3.5)引脚输入的脉冲;
M0,M1定时/计数模式选择开关:
Mode0(M1 = 0,M0 = 0):
提供两个13位定时器/计数器(Timer 0/Timer 1),如前所述,计数量分别存放在TH1和TL1两个8位计数寄存器里。其中TH1放置8位,TL1放置5。
如前所述,若要执行定时功能,则C/T设定为0,计数内部脉冲;若要执行计数功能,设置C/T为1,计数外部脉冲信号。
启动方式为外部启动时:设定GATE = 1,TR1=1,再等待外部中断引脚INT1输入高电平,即可启动 Timer 1;
启动方式为内部启动时:设定GATE = 0,TR1=1,即可启动 Timer 1;
Mode1(M1 = 0,M0 = 1):
提供两个16位定时/计数器,计数量分别存放在THx和TLx两个8位计数寄存器里。
Mode 1下的定时器/计数器的工作模式切换、启动方式等与Mode 0 完全一样,Mode 1计数量更大,所以完全可以替代Mode 0。
Mode 2(M1 = 1,M0 = 0):
提供两个8位可自动加载的定时器/计数器(Timer 0和 Timer 1),其计数寄存器里的计数量放置在TLx里,当改定时器/计数器中断时,会自动将THx计数寄存器里的计数量载入到TLx里。由于计数只用了8位,所以其最大计数为256。
Mode 2下的定时器/计数器的工作模式切换、启动方式等与Mode 0 完全一样。
Mode 3(M1 = 1,M0 = 1):
此工作模式是一种特殊的模式,提供一个8位的定时器/计数器 Timer 0和一个8位的定时器Timer 1。
其中Timer 0除了不具有自动加载功能外,与Mode 2的Timer0几乎完全一样。
而Timer 1定时器也几乎可以被Mode 2的Timer 1所取代。
定时器/计数器控制寄存器TCON
寄存器TCON的高四位一共定时器/计数器的启动开关和中断时的标志位,低四位为外部中断触发控制位和外部中断请求标志位,如下图:
TF1:定时器Timer 1中断(溢出)标志位。当Timer 1时,由硬件自动设定TF1= 1,并向CPU申请中断。Timer 1中断结束时,CPU自动对TF1清零。TF1也可以用软件清零。
TR1:定时器Timer 1启动开关。TR=1,Timer 1启动,TR1=0关闭Timer 1。
TF0:定时器T0溢出标志位。其功能与TF1相同。
TR0:定时器T0运行控制位。其功能与TR1相同。
IE1:外部中断1(INT1)标志位。
IT1:外部中断1(INT1)触发方式控制位。
IE0:外部中断0(INT0)标志位。
IT0:外部中断0(INT0)触发方式控制位。
计数寄存器:
8051的计数寄存器是THx和TLx两个8位寄存器,除了Mode 3之外,TH0和TL0是Timer 0所使用的计数寄存器,TH1和TL1是Timer 1所使用的的计数寄存器。若是8052还有Timer 2所使用的TH2和TL2。
8051定时器/计数器是一种正数计数器。当计数到满(溢出)时,即产生中断。我们计数时用该模式下的最大计数量减去所需计数,即从终点往前推,比如最大计数量为100,需要计数40,则从60处开始计数。
不同模式下的最大计数量不同,设定方式也有差异。
下面对各个模式下计数寄存器分别做说明:
Mode 0
由于Mode 0 TLx计数寄存器只使用5位,2^5 = 32,我们要把计数起点的值除以32,其余数放入TLx计数寄存器;其商放入THx计数寄存器。例如要使用Timer 0计数6000,则:
TL0 = (8192 - 6000)% 32;//取低5位
TH0 = (8192 - 6000)/ 32;//取高8位
Mode 1
在此模式下,TLx和THx计数寄存器都是8位,而2^8=256,同样使用Timer 0计数6000则
TL0 = (65536 - 6000)% 256;
TH0 = (65536 - 6000)/ 256;
Mode 3
在此模式下,使用TL0计数寄存器作为第一个定时器/计数器的计数量,而TH0计数寄存器作为第二个定时器的计数量,用到哪个就填入哪个。两个都用到就对TL0、TH0分别填入对应的值。填入方法与Mode 2一样。
定时器/计数器的使用
定时器/计数器有两种使用方式:中断和查询
中断:包括定时器/计数器中断的设定、计数量的设定、启动设定及中断子程序的编写
查询:只要设定计数量及启动,然后判断定时器/计数器的标志位(TFx)是否动作,接着程序流程的跳转。
中断设定(关于8051的中断就不展开了):
中断的设定包括开启开关(IE寄存器的设定)、中断优先级的设定(即IP寄存器的设定)、中断信号的设定(TCON寄存器的设定)等。例如要开启中断总开关及T0开关(IE为中断启用寄存器,IP为中断优先级寄存器):
IE=0x82;//打开中断总开关及启用T0中断
把T0中断设定高优先级,并设定为内部定时器,软件启动方式,采用Mode 1:
IP=0x02;//T0中断高优先级
TMOD = 0x01;//设定为内部定时器、软件启动和Mode 1
计数量设定 (略,见上文)
定时器/计数器启动
TRx=1;// 启动Timer x
中断子程序
中断程序格式:void +函数名+interrupt +数字0—5
0 外部中断INT0
1 定时器/计数器TF0
2外部中断INT1
3定时器/计数器TF1
4串行口TI/RI
5定时器/计数器TF2/EXF2(8052才有)
注意区分定时器/计数器的中断编号与外部中断编号,定时器 0的中断编号为 1,定时器 1的中断编号为 3,定时器 2的中断编号为 5。
如:
void my_INT (void) interrupt 3 //Timer 1溢出中断子程序
{
…….//中断子程序逻辑代码
}
相关问答
8051单片机 的 定时器 /计数器处于方式0工作方式时为13位的,请...[最佳回答]num=13位数=8191.num=XXXXXXXX_---YYYYY.XXXXXXXX,就是高八位;YYYYY,就是低五位;---,其它三位,没有定义,不知道是什么值.num...
什么是 8051单片机 的 定时器 计数器如何实现计时功能?8051单片机的定时器计数器是一个用于计时的功能模块。它可以通过设置初始值和使能定时器来开始计时。定时器计数器会按照设定的时钟频率递增计数,当计数值达...
简述 8051单片机 的定时/计数器的四种工作方式的特点?具体如下所示:1、为13位计数器,由TL(1/0)的低5位和TH(0/1)的8位组,此时TL(1/0)的高3位未用。C/T:C/T为0就是用作定时器(开关往上打),如果C/T为1就...具体如....
8051单片机定时器 计算器的门控信号G ATE设置为1时。定时器如何启动?设8051单片机定时器0的门控信号GATE设置为1,定时器0如何启动?1、设置TR0=1,但这时候是不启动的,因为还需要一个条件。2、给INT0引脚输入高电平,这时候才启...
8051单片机 的 定时器 0的中断程序入口地址为?000bH如:ORG0000HAJMPSTARTORG000bH;T0中断地址入口AJMPINT_T0;转到真正的处理程序处ORG30H51...000bH如:...
单片机 定时的时间怎么改变?定时器实质是计数器。当计数脉冲周期一定时,就有定时功能。雅帆用水桶给你打个比方吧!一、向上计定时数器举例当一个255毫升的烧杯,提前放入155毫升水后,...
8051单片机 有几个16位 定时器 ?基本型8051单片机有两个16位定时器,分别叫做T0和T1,为了适配8位数据总线,每个定时器又被拆分成高8位和低8位两个寄存器,例如T0就拆成TH0和TL0。扩展型8051单...
51 单片机 内部 定时器 的工作原理?51单片机内部定时的工作原理:定时器计数8051单片机片内振荡器输出经过12分频后的脉冲个数,即:每个机器周期使定时器T0/T1的寄存器值自动累加1,直到溢出,溢出...
自学 单片机 reg51.h定时程序是里头的TH1、TL1、TR1、TMOD是什...TH1,TL1、TR1、TMOD是单片机的特殊寄存器,是用来控制计数/中断器的.TMOD(工作方式控制寄存器);TH1/TL1是定时器/计数器1;TR1=1是启动定时器1。TH1计数器1,TL....
8051定时器 计时功能?在8051微控制器中,定时器(Timer)功能可以实现计时功能。8051微控制器通常具有多个定时器,如定时器0和定时器1。通过编程设置定时器的计数值和工作模式,可以实...