300 likes | 474 Views
第 6 章 单片机的定时器 / 计数器. 本章的重点内容. 定时器 / 计数器的 结构及原理 定时器 / 计数器的各种 工作方式 掌握定时器/计数器的 应用. 6.1 定时器 / 计数器结构与原理. 定时 / 实现方式: 1. 软件定时; 2. 不可编程硬件定时; 3. 可编程定时 。. 多重循环. 定时芯片 8253. 定时 / 计数器. 定时 / 计数器的功能. 定时 / 计数器的核心部件是 二进制加 1 计数器 (TH0 、 TL0 或 TH1 、 TL1) 。.
E N D
本章的重点内容 • 定时器/计数器的结构及原理 • 定时器/计数器的各种工作方式 • 掌握定时器/计数器的应用
6.1 定时器/计数器结构与原理 定时/实现方式: 1.软件定时; 2.不可编程硬件定时; 3.可编程定时 。 多重循环 定时芯片8253 定时/计数器
定时/计数器的功能 定时/计数器的核心部件是二进制加1计数器(TH0、TL0或TH1、TL1) 。 1. 定时功能----计数输入信号是内部时钟脉冲,每个机器周期使寄存器的值加1。所以,计数频率是振荡频率的1/12。 2. 计数功能----计数脉冲来自相应的外部输入引脚,T0为P3.4,T1为P3.5。
6.1.1 定时/计数器的结构 图6-1 80C51定时器/计数器逻辑结构图
6.1.2 定时/计数器的工作原理 用一个简单的框图构造它的模型 :N位计数器构成了电路的核心。定时,计数两种方式的区别在于计数器的脉冲来源.初值寄存器是用来设定“定时/计数的具体参数” (1):何时控制启动计数?(2):如何控制定时还是计数? (3):如何控制定时/计数的长短? 系统内部 时钟fosc/12 计数脉冲CP 计数器溢出 中断信号 定时/计数 控制C/T TFx N位+1计数器 N位初值寄存器 外部脉冲 启动控制TR 返回
ALE 检测 计数 检测 S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6 机器周期2 机器周期1 * 定时功能 1)每过一个机器周期,计数器增1,直至计满溢出(12分频) 2)定时器的定时时间与系统的振荡频率紧密相关 3)MCS-51单片机的一个机器周期由12个振荡脉冲组成 如果晶振频率为12MHZ,则:
1 40 P1.0 VCC 2 39 P1.1 P0.0 38 3 P1.2 P0.1 4 37 P1.3 P0.2 5 36 P1.4 P0.3 35 6 P1.5 P0.4 7 34 P1.6 P0.5 8 33 P1.7 P0.6 9 32 RST/VPD P0.7 10 31 RXD P3.0 EA/VPP 8031 8051 8751 11 30 TXD P3.1 ALE/PROG 12 29 INT0 P3.2 PSEN 13 28 INT1 P3.3 P2.7 14 27 T0 P3.4 P2.6 15 26 T1 P3.5 P2.5 16 25 WR P3.6 P2.4 24 17 P2.3 RD P3.7 ALE 18 23 XTAL2 P2.2 19 22 XTAL1 P2.1 检测 计数 检测 20 21 VSS P2.0 S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6 机器周期2 机器周期1 (2)计数
6.2 定时计数器的相关控制寄存器1.模式控制寄存器TMOD D7 D6 D5 D4 D3 D2 D1 D0 GATE C/T M1 M0 GATE C/T M1 M0 M1 M0 T1控制 T0控制 M1 M0—工作方式选择 C/T—定时/计数工作方式选择
GATE位:门控位。 (1) 当GATE=1时,定时受外部脉冲的控制只有或引脚为高电平且TR0或TR1置1时,相应的定时/计数器才被选通工作,这时可用于测量端出现的正脉冲宽度; (2) 当GATE=0,则只要TR0和TR1置1,定时/计数器就被选通,而不管或的电平是高还是低。
2.控制寄存器TCON 中断请求 标志 触发方式选择 启动定时/计数器 0 低电平 1 下降沿 0 停止 1 启动
* 各标志位应注意的问题 • TF1位:定时器1溢出标志位。 • 当定时/计数器1溢出时,由硬件置1。 • 使用查询方式时,此位做状态位供查询,查询有效后需由软件清零; • 使用中断方式时,此位做中断申请标志位,进入中断服务后被硬件自动清零。 • TR1位:定时器1运行位。 • 该位靠软件置位或清零,置位时,定时/计数器接通工作,清零时,停止工作。
振荡器 1/12 C/T=0 TL0 TH0 TF0 C/T=1 T0 8位 低5位 TR0 & 1 ≥1 GATE INT0 6.3 定时器/计数器的工作方式 定时器/计数器共有四种工作方式 1. 方式0—13位方式 定时器 13位计数器 演 示 继 续
TH0 TL0 返 回
C / T • 当 =0时,控制开关接通内部振荡器,T0对机器周期进行计数,其定时时间为: t=(213-T0初值)×机器周期 • 当 =1时,控制开关接通外部输入信号,当外部信号电平从“1”到“0”跳变时,加1计数器加1,处于计数工作方式。 C / T
振荡器 1/12 C/T=0 8位 8位 TL0 TH0 TF0 16位计数器 C/T=1 T0 TR0 & 1 GATE ≥1 INT0 2. 方式1—16位方式 其定时时间为:t=(216-T0初值)×机器周期
振荡器 1/12 C/T=0 TL0 TF0 C/T=1 T0 TR0 & TH0 1 GATE ≥1 INT0 3. 方式2—8位自动装入时间常数方式 其定时时间为:t=(28-T0初值)×机器周期
4. 方式3—2个8位方式 仅T0可以工作在方式3—此时T0分成2个 独立的计数器—TL0和TH0 , TL0用来作为T0的控制信号(TR0、TF0), TH0用来作为T1的控制信号(TR1、TF1)。
6.4 单片机定时器/计数器的应用 可编程器件在使用前需要进行初始化: • 确定TMOD控制字:编程时将控制字送 • TMOD; ② 计算计数器的计数初值: 编程时将计数初值送THi、 TLi; ③ 开中断(如果使用中断方式): 编程实置位EA、ETi ④ TRi位置位控制定时器的启动和停止。
500μs 8051 P1.0 例1:设晶振频率fOSC=6MHz,使用定时器1以方式1产生周期为500μs的方波脉冲,并由P1.0 输出。试以中断方式实现。
GATE C/T M1 M0 GATE C/T M1 M0 0 0 0 1 X X X X 定时器1 方 式1 ① TMOD确定 T0控制 T1控制 控制字10H
要产生500μs 的方波脉冲,只需在P1.0端以250μs为间隔,交替输出高低电平即可实现。为此,定时间应为250μs 。使用6MHz晶振,则一个机器周期为2μs,设待求计数初值为X,则: ② 计算计数器的计数初值; 请思考 为什么? (216–X)×2×10 -6 =250×10 -6 即216–X=125 X=216-125=10000H-7DH =0FF83H 所以,初值为:TH1=0FFH,TL1=83H
③ 采用中断方式:编程时打开全局和局部中断。 ④ 由定时器控制寄存器TCON中的TR1位控制定时器的启动和停止。 TR1=1,启动; TR1=0,停止。
程序设计 ORG 0000H LJMP MAIN ;主程序入口 ORG 001BH LJMP INTT1 ;T1中断入口
ORG 1000H MAIN:MOV TMOD, #10H ;T1为方式1 MOV TH1, #0FFH MOV TL1,#83H ;初值 SETB EA ;允许中断 SETB ET1 SETB TR1 ;启动定时 SJMP $ ;等待中断 INTT1: MOV TH1,#0FFH ;重新设置初值 MOV TL1,#83H CPL P1.0;输出取反 RETI
【例2】低频信号发生器驱动程序 • 设计一个控制程序,使80C51的P1口输出8路低频方波脉冲,频率分别为100、50、25、20、10、5、2、1Hz。 • 使用定时器T0,产生5ms的定时,若晶振选11.0592MHz,则5ms相当于4608个机器周期,T0应工作于方式1,初值位x为:x=65536-4608=60928。用十六进制数表示则:x=0EE00H。 • 对应于P1.0 ~P1.7,设立8个计数器,初值分别为1、2、4、5、10、20、50、100,由T0的溢出中断服务程序对它们减“1”计数,当减为零时恢复初值,并使相应的口线改变状态,这样就使P1口输出所要求的方波。
主程序 • ORG 0000H • START: AJMP MAIN • ORG 000BH • AJMP PTFO • MAIN: MOV SP,#70 ;主程序:栈指针初始化 • MOV 31H,#2 ;各路计数器置初值 • MOV 32H,#4 • MOV 33H,#5 • MOV 34H,#10 • MOV 35H,#20 • MOV 36H,#50 • MOV 37H,#100 • MOV TMOD,#1 ;T0方式1定时 • MOV TL0,#0 ;初值→T0 • MOV TH0,#0EEH • MOV IE,#82H ;允许T0中断 • SETB TR0 ;允许T0计数 • HERE: SJMP HERE ;踏步,通常CPU处理其他工作
中断程序 • ORG 0030H • PTF0: MOV TH0,#0EEH ;T0中断服务程序 • MOV TL0,#0 ;初值→T0 • CPL P1.0 • DJNZ 31H,PF01 ;对各路计数器进行计数 • MOV 31H,#2 ;计数器减为0,恢复计数初值 • CPL P1.1 • PF01: DJNZ 32H,PF02 ;输出相反 • MOV 32H,#4 • CPL P1.2 • PF02: DJNZ 33H,PF03 • MOV 33H,#5 • CPL P1.3
中断程序 • PF03: DJNZ 34H,PF04 • MOV 34H,#10 • CPL P1.4 • PF04: DJNZ 35H,PF05 • MOV 35H,#20 • CPL P1.5 • PF05: DJNZ 36H,PF06 • MOV 36H,#50 • CPL P1.6 • PF06: DJNZ 37H,PF07 • MOV 37H,#100 • CPL P1.7 • PF07: RETI