320 likes | 388 Views
第六章 MCS-51 定时器 / 计数器. 6 .1 定时器 / 计数器结构及工作方式. 1. 6 .2 定时器应用举例. 2. §6.1 定时器/计数器结构及工作方式. 学习内容. 2. 3. 1. 寄存器. 工作方式. 结构. 一、定时器 / 计数器结构. T1 :是 16 位加法 计数器,分别由两个八位专用寄存器 TH1 和 TL1 组成。. T0 :是 16 位加法 计数器,分别由两个八位专用寄存器 TH0 和 TL0 组成。. 1 、 MCS-51 单片机内有 两个可编程的 定时器 / 计数器 T0 、 T1 ,其逻辑结构如下图所示 :.
E N D
第六章 MCS-51定时器/计数器 6.1定时器/计数器结构及工作方式 1 6.2定时器应用举例 2
§6.1 定时器/计数器结构及工作方式 学习内容 2 3 1 寄存器 工作方式 结构
一、定时器/计数器结构 T1:是16位加法计数器,分别由两个八位专用寄存器TH1和TL1组成。 T0:是16位加法计数器,分别由两个八位专用寄存器TH0和TL0组成。 1、MCS-51单片机内有两个可编程的定时器/计数器T0、T1,其逻辑结构如下图所示: 用来设置定时器的工作方式。 用来控制定时器的启动、停止及中断。 图6-1 MCS-51定时器/计数器逻辑结构图
2、定时器/计数器功能 • 定时器 • 是通过内部计数器的计数来实现的,计数脉冲来自单片机的内部,其频率是振荡(晶体)频率的1/12,即每个机器周期产生一个计数脉冲,计数器加1,直至计满溢出。
计数器 是对外来脉冲进行计数。计数器对来自输入引脚P3.4和P3.5的外部信号计数,外部脉冲的负跳变(下降沿)触发计数。 • 检测一个由1到0的负跳变需要两个机器周期。所以最高计数频率为晶体频率的1/24。
问题的提出 晶振频率为12MHz时,定时器和计数器的最高计数频率各是多少?
回答: 晶振频率为12MHz时,定时器和计数器的最高计数频率各为1MHz、500KHz .
二、定时器/计数器寄存器 • 分三类: • 定时器/计数器方式寄存器:TMOD • 定时器/计数器控制寄存器:TCON • 定时器初值寄存器: TH0 TL0 TH1 TL1
D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0 TMOD GATE GATE C / T M 1 C / T M 1 M 0 M 0 T 1 方式控制 T 0 方式控制 图 6 - 2 TMOD 寄存器各位定义 • 1、定时器/计数器方式寄存器TMOD(89H) • GATE:门控位,用来控制定时器/计数器的启动是否受外部中断请求信号的影响。 • GATE=0,不受影响,仅由控制位TRx控制; • GATE=1,受TRx和外部中断请求信号共同控制。
C/T:定时或计数功能选择位。 • C/T=1,为计数器方式; • C/T=0,为定时器方式。 • M1M0:定时器四种工作方式选择: • 00: 方式0:13位定时器/计数器 • 01: 方式1:16位定时器/计数器 • 10: 方式2:自动重装初值的8位定时器/计数器 • 11: 方式3:T0分成两个8位定时器/计数器
D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0 TMOD GATE GATE C / T M 1 C / T M 1 M 0 M 0 T 1 方式控制 T 0 方式控制 [例6-1]: 某一系统使T1作为定时器,采用方式2,使T0作为计数器采用方式1,T0、T1的门控位均为0,请设置TMOD的值。 0 0 1 0 0 1 0 1 即:TMOD=25H.
2、定时器/计数器控制寄存器TCON(88H,可位寻址)2、定时器/计数器控制寄存器TCON(88H,可位寻址) x=0、1 • TRx: Tx的运行控制位。 • TRx=1,启动定时器/计数器 • TRx=0,关闭定时器/计数器
3、定时器初值寄存器 TH0 TL0 TH1 TL1 • 用于存放计数初值,具有自动加1功能,加满后溢出,它们的字节地址是: • TH1(8位) TL1(8位) TH0(8位) TL0(8位) • 8DH 8BH 8CH 8AH • 根据定时器/计数器工作方式,计数长度可分别选择:8位,13位,16位。
三、工作方式 MCS-51的定时器/计数器共有四种工作方式,其中: • T0有方式0、1、2、3四种; • T1有方式0、1、2三种。
TMOD 振荡器 ÷ 12 C / T = 0 S2 0 M 0 TCON S1 0 M 1 TL 0 TH 0 TF 0 (低5位) (高8位) C / T 中 T0(P3.4) TR 0 GATE C / T = 1 断 控 制 INT0(P3.2) 图 6 - 4 方式 0 ( 13 位计数器 ) 1、工作方式0(以T0为例)—13位定时器/计数器 TL0的高3位没有用。
C/T=1,S1接下面,T0作计数器,对P3.4引脚输入的外部脉冲计数,当脉冲发生负跳变时,计数器加1,计数值公式为: N=213 – x=8192 – x 其中:N为计数值,x是THx、TLx的初值。 x=8191(1FFFH)时,N最小值=1; x=0时,N最大值=8192。 则N的范围:1~8192。
C/T=0时, S1接上面,T0作定时器,对机器周期脉冲Tcy计数。 • 求定时时间由下式确定: t=N·Tcy=(213 – x)Tcy= (8192 – x)Tcy • 其中: t为定时时间。 • 求计数初值计算公式: x=213 – t/Tcy=8192 – t/Tcy
TMOD C/ T =0 振荡器 ÷12 1 M 0 TCON 0 M 1 TL 0 TH 0 TF 0 (8位) (8位) 中 C/ T T0(P3.4) C/ T =1 TR 0 断 GATE 控 制 INT0(P3.2) 图6-5 方式1(16位计数器) 2、工作方式1(以T0为例)—16位定时器/计数器
C/T=1,S1接下面,T0作计数器,对P3.4引脚输入的外部脉冲计数,当脉冲发生负跳变时,计数器加1,计数值公式为: N=216 – x=65536 – x 其中:N为计数值,x是THx、TLx的初值。 x=65535(FFFFH)时,N最小值=1; x=0时,N最大值=65536; 则N的范围:1~65536。
C/T=0时, S1接上面,T0作定时器,对机器周期脉冲Tcy计数。 • 求定时时间由下式确定: t=N·Tcy=(216 – x)Tcy= (65536 – x)Tcy • 其中: t为定时时间。 • 求计数初值计算公式: x=216 – t/Tcy=65536 – t/Tcy
3、工作方式2(以T0为例)—8位定时器/计数器 TL0作为8位加法计数器, TH0作为初值寄存器用。TL0加法计数器溢出时置TF0=1,而且发出重装载信号,使三态门打开,将TH0中的初值自动送入TL0。
C/T=1,S1接下面,T0作计数器,对P3.4引脚输入的外部脉冲计数,当脉冲发生负跳变时,计数器加1,计数值公式为: N=28 – x=256 – x 其中:N为计数值,x是THx、TLx的初值。 x=255(FFH)时,N最小值=1; x=0时,N最大值=256; 则N的范围:1~256。
C/T=0时, S1接上面,T0作定时器,对机器周期脉冲Tcy计数。 • 求定时时间由下式确定: t=N·Tcy=(28 – x)Tcy= (256 – x)Tcy • 其中: t为定时时间。 • 求计数初值计算公式: x=28 – t/Tcy=256– t/Tcy
[例6-2]:已知晶振6MHz,要求定时0.5ms,试分别求出T0工作于方式0、方式1、方式2时的定时初值。[例6-2]:已知晶振6MHz,要求定时0.5ms,试分别求出T0工作于方式0、方式1、方式2时的定时初值。 解:机器周期Tcy=12/fosc=12/6MHz=2us; 定时t=0.5ms=500us. ①工作方式0: x= 213 – t/Tcy=213 –500us/2us =8192 – 250=7942=1F06H =1111100000110B 则TL0=00000110B=06H, TH0=11111000B=0F8H
②工作方式1: x= 216 – t/Tcy=216 –500us/2us =65536 – 250=65286=FF06H 则TL0=06H,TH0=0FFH ③工作方式2: x= 28 – t/Tcy=28 –500us/2us=256 – 250=6=6H 则TL0=06H TH0=06H(重装初值寄存器,其值不变)
学习内容 2 1 应用举例 应用步骤 • §6.2定时器应用举例
一、定时器应用步骤 • 1、T0、T1的选择使用; • 2、合理选择工作方式——TMOD; • 3、计算初值; x=2n –t/Tcy 其中,n与工作方式有关, • 方式0,n=13; • 方式1,n=16; • 方式2、3时,n=8。
一、定时器应用步骤 • 4、编制应用程序: • 定时器/计数器的初始化: • 写TMOD; • 写入定时初值; • 设置中断系统的IP、IE; • 启动定时器运行(TRx)。 • 正确编制定时器/计数器中断服务程序。
二、定时器编程举例 [例6-3]:设单片机晶振频率fosc=12MHz,使用T0以方式0产生周期为1ms的方波,并由P1.0输出。以中断方式完成编程。 解: 1、TMOD配置 T1不用,有关位设置为0; T0的GATE=0,C/T=0,M1M0=00(方式0)。 则TMOD初始化设置为00000000B,即00H。
2、计算初值 • 产生1ms的方波,只需在P1.0端以0.5ms为周期交替输出高低电平即可,因此定时时间为0.5ms 。 • Tcy=12/fosc=12/12MHz=1us • x=213–t/Tcy=8192-500us/1us=8192-500=7692 • =1E0CH=111100000 1100B, • TH0=11110000B=0F0H;TL0=00001100B=0CH • 3、启动和中断 • 定时器T0的启动由TR0控制,即TR0=1启动。 • 定时器T0的中断允许由ET0和EA控制, • 即ET0=1、EA=1。
4、程序设计 • ORG 0000H • LJMP MAIN • ORG 000BH • LJMP DS0 • ORG 0100H • MAIN: MOV SP, #30H • MOV TL0, #0CH • MOV TH0, #0F0H • MOV TMOD, #00H • SETB ET0 • SETB EA • SETB TR0 • SJMP $ • DS0: MOV TL0, #0CH • MOV TH0, #0F0H • CPL P1.0 • RETI
练习题:设单片机晶振频率fosc=6MHz,使用T1以方式2产生周期为1ms的方波,并由P1.0输出。以中断方式完成。练习题:设单片机晶振频率fosc=6MHz,使用T1以方式2产生周期为1ms的方波,并由P1.0输出。以中断方式完成。