第5章 定时器/计数器
定时/计数器的功能
MCS-51单片机内共有两个可编程的定时/计数器T0和T1。它们都是十六位加法计数器结构,分别由TH0、TL0和TH1、TL1四个8位计数器组成,每个定时/计数器都具有定时和计数两种功能。
-
计数功能
对外来脉冲进行计数。计数脉冲的输入端来自单片机的两个信号引脚T0(P3.4)和T1(P3.5)外部输入的脉冲在负跳变时有效,计数脉冲的频率最高为振荡频率的1/24。 -
定时功能
定时功能也是通过计数器的计数来实现的,不过这时的计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲。因此,计数频率为振荡频率的1/12。这样,不但可以根据计数器的预置值计算出定时时间,也可以反过来按定时时间的要求,计算出计数器的预置值。
与定时/计数器有关的寄存器
-
定时器控制寄存器(TCON)
该寄存器既参与中断控制又参与定时控制。其主要功能是:定时器在溢出时,设定标志位(TFx),并控制定时器的运行或停止等(TRx)。8F 8E 8D 8C 8B 8A 89 88 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
-
定时器方式寄存器(TMOD)
用于控制两个定时/计数器的工作方式,高4位定义T1,低4位定义T0,字节地址为89H。格式:
GATE C/T M1 M0 GATE C/T M1 M0 T1 T0
- GATE:门控位
- GATE=0,以运行控制位TRx启动定时器
- GATE=1,以外中断请求信号(INT1或INT0)启动定时器。
- C/T:定时或计数方式选择位:
- C/T=0,定时工作方式
- C/T=1,计数工作方式。
- M1M0:工作方式选择位:
- M1M0=00,方式0:13位计数(TL0-4、TH0-7)
- M1M0=01,方式1:16位计数
- M1M0=10,方式2:8位计数,有自动装入功能。
- M1M0=11,方式3:T0分为两个8位计数器,TL0允许作为定时或计数方式,TH0只能作为定时方式
- GATE:门控位
定时/计数器工作方式
-
方式0
- 方式0是13位结构的工作方式,其计数器由TH1的全8位和TL1的低5位构成。TL1的高3位弃之不用。
- 计数方式:计数值的范围为:1~8192(2^13)
- 定时方式:定时时间T的计算公式为:
- T=(2^13-计数初值x)晶振周期/12
- 或 T=(2^13-计数初值x)机器周期
- 启动的条件是:(TRx=1) AND (GATE=0 OR INTx=1)
方式0应用举例:
设单片机晶振频率fosc=6MHz,使用定时器1以方式0产生周期为500us的方波,并由P1.0输出。以查询或中断方式完成。解:
- 计算定时初值x
欲产生500us的方波,只需在P1.0端以250us为周期交替输出高低电平即可实现。为此,定时时间应为250us。晶振为6MHz,则1个机器周期为2us。
则: (2^13-x)*2uS=250uS, x=8067=1111110000011B
即: TH1=0FCH,TL1=03H。 - TMOD寄存器初始化
定时器1,M1M0=00H(方式0),C/T=0(定时),GATE=0(以软件启动定时器),不用的位设定为0,最后得TMOD应初始化00H。 - 用TCON寄存器的TR1位来启动(=1)或停止(=0)定时器。
查询方式程序:
MOV TMOD,#00H ;T1工作在方式0 SETB TR1 ;启动T1工作 LOOP: MOV TL1,#03H MOV TH1,#0FCH ;置定时初值 WAIT: JNB TF1,WAIT ;定时未到,循环等待 CLR TF1 ;定时到,清TF1 CPL P1.0 ;由P1.0输出,信号取反 SJMP LOOP ;循环输出方波
中断方式程序:
ORG 8000H MOV TMOD,#00H ;T1工作在方式0 MOV TL1,#03H MOV TH1,#0FCH ;置定时初值 SETB EA ;开中断 SETB ET1 ;允许T1中断 LOOP: SETB TR1 ;启动T1工作 WAIT: SJMP WAIT ;等待中断 AJMP LOOP ORG 001BH ;T1中断入口 LJMP SUB ;跳至中断服务程序SUB ORG 8100H ;中断服务程序 SUB: CPL P1.0 ;输出信号取反 MOV TL1,#03H MOV TH1,#0FCH ;重置定时初值 RETI ;中断返回
-
方式1
其逻辑电路和工作情况与方式0完全相同。所不同的只是组成计数器的位数为16位。7 0 7 0 TL1 TH1 TF1
- 计数值的范围为: 1~65536(2^16)
- 定时时间的计算公式与方式0类似。即:
- T=(2^16-计数初值x)晶振周期/12
- 或 T=(2^16-计数初值x)机器周期
-
方式2
- 方式2具有自动重新加载功能,即自动加载计数初值。该方式把16位计数器分为两部分,既以TL1作计数器,以TH1作预置计数器,初始化时把计数初值分别装入TL1和TH1中。
- 当计数溢出后,由预置寄存器TH1,以硬件方法自动给计数器TL1重新加载。
- 最大计数值只能到255。这种工作方式非常适用于循环定时或循环计数应用。
方式2应用举例:
设单片机晶振频率fosc=6MHz,使用T0以方式2产生周期为200us的方波,并由P1.0输出。以查询或中断方式完成。解:
- 计算计数初值x
晶振为6MHz,则1个机器周期为2us。则:
(2^8-x)*2=100,x=206=CEH
即 TH0=0CEH,TL0=0CEH。 - TMOD寄存器初始化
定时器0,M1M0=10H(方式2),C/T=0(定时), GATE=0(以软件启动定时器),不用的位设定为0,最后得TMOD应初始化为02H。 - 用TCON寄存器的TR0位来启动(=1)或停止(=0)定时器。
查询方式程序:
MOV TMOD,#02H ;T0工作在方式2 MOV TL0,#0CEH MOV TH0,#0CEH ;置定时初值 SETB TR0 ;启动T0工作 WAIT: JNB TF0,WAIT ;定时未到, 循环等待 CLR TF0 ;定时到,清TF0 CPL P1.0 ;由P1.0输出,信号取反 SJMP WAIT ;循环输出方波
中断方式程序:
MOV TMOD,#02H ;T0工作在方式2 MOV TL0,#0CEH MOV TH0,#0CEH ;置计数初值 SETB EA ; 开中断 SETB ET0 ; 允许T0中断 LOOP: SETB TR0 ;启动T0工作 WAIT: SJMP $ ;等待中断 CLR TF0 ;计数溢出标志位TF0清0 AJMP LOOP ORG 000BH ;中断服务程序 CPL P1.0 ;由P1.0输出,信号取反 RETI ;中断返回
-
方式3
- 在工作方式3下,T0被拆成两个独立的8位计数器。其中TL0既可以作计数器使用,又可以作定时器使用,其功能和操作方式与方式0或方式1完全相同。而TH0只能作8位定时器使用,并占用了T1的中断资源TR1和TF1。
- 如果T0已工作在方式3下,则T1只能工作在方式0-2下,用于任何不需要中断控制的场合,或用作串行口的波特率发生器。通常只有当T1用作串行口的波特率发生器时,T0才被定义为方式3,以增加一个8位计数器。这时,只要设置好工作方式,T1便可自动运行。如要停止工作,只需送入一个把它设为方式3的控制字即可这时T1直接把溢出标志TF1送给串行口。
练习题
编程实现利用定时器T1产生一个50Hz的方波,由P1.3输出,设晶体振荡器频率为12MHz。
标签:定时器,方式,T1,计数,计数器,定时 From: https://www.cnblogs.com/jacx93/p/18119030