150 likes | 279 Views
第 8 章 定时器 / 计数器. 1 .软件定时 软件定时是让计算机执行一段程序来进行时间延时。 2 .硬件定时 硬件定时是指由硬件电路来实现定时的功能 。 3 .可编程定时 / 计数器 由于纯软件定时要占用 CPU ,而纯硬件定时又欠灵活。. 8.1 、定时 / 计数器的结构及工作原理. 定时 / 计数器的结构. 1 、定时 / 计数器的模式寄存器 (一)定时 / 计数器模式寄存器 TMOD TMOD 寄存器用来设定定时 / 计数器的工作模式,低 4 位用于 T0 ,高 4 位用于 T1 。.
E N D
第8章 定时器/计数器 • 1.软件定时 软件定时是让计算机执行一段程序来进行时间延时。 • 2.硬件定时 硬件定时是指由硬件电路来实现定时的功能 。 • 3.可编程定时/计数器 由于纯软件定时要占用CPU,而纯硬件定时又欠灵活。
8.1、定时/计数器的结构及工作原理 定时/计数器的结构
1、定时/计数器的模式寄存器 • (一)定时/计数器模式寄存器TMOD • TMOD寄存器用来设定定时/计数器的工作模式,低4位用于T0,高4位用于T1 。 GATE:门控位。GATE=0,定时/计数器的运行只受定时/计数器控制寄存器TCON中运行控制位TR的控制;GATE=1,定时/计数器的运行受TR和外部中断输入信号或的双重控制。
计数/定时器工作方式选择位。 =1,为计数工作方式,定时器对外部脉冲信号进行计数; =0,为定时工作方式,定时/计数器对内部机器周期进行计数。
2、控制寄存器 • TF1:定时/计数器T1的溢出标志位。T1溢出 时由硬件置“1”,向CPU申请中断,CPU响应中断后,由硬件自动清“0”。TF1也可由软件置“1”或清“0”。 • TR1:定时/计数器T1的运行控制位。由软件置“1”或清“0”来控制T1的启动或停止运行。 • TF0:定时/计数器T0的溢出标志位。含义与TF1类同。 • TR0:定时/计数器T0的运行控制位。含义与TR1类同。
8.2、定时/计数器的工作模式 MCS-51单片机的定时/计数器T0有模式0、模式1、模式2和模式3四种工作模式,定时/计数器T1有模式0、模式1和模式2三种工作模式,由模式寄存器TMOD中的M1、M0两个选择位设定。
8.3 定时/计数器的初始化 • 1、初始化编程 初始化编程主要包括以下几部分: (1)根据确定的定时/计数器的工作模式,对模式寄存器TMOD赋值。 (2)设置定时或计数初值。即把定时或计数初值写入TH0、TL0或TH1、TL1。 (3)系统需要中断方式时,要对寄存器IE赋值,开放相应的中断。 (4)对寄存器TCON中的TR0或TR1置位,启动定时/计数器进行定时或计数。
2、计数器初值的计算 定时器/计数器可用软件随时随地起动和关闭,起动时它就自动 加“1”记数,一直记到满,即全为“1”,若不停止,计数值从全“1” 变为全“0”,同时将计数溢出位置“1”并向CPU发出定时器溢出中 断申请。对于各种不同的工作方式最大的定时时间和计数数不 同。这里在使用中就会出现两个问题: 一是要产生比定时器最大的定时时间还要小的时间和计数器最 大计数次数还要小的计数次数怎么办? 二是要产生比定时器最大的定时时间还要大的时间和计数器最 大计数次数还要大的计数次数怎么办? 解决以上第一个问题只要给定时器/计数器一个非零初 值,开定时器/计数器时,定时器/计数器不从0开始, 而是从初值开始,这样就可得到比定时器/计数器最大 的定时时间和计数次数还要小的时间和计数次数,解 决第二个问题就要用到循环程序了,循环几次就相当 于乘几。
设计数器从初值开始作加1计数到计满为全1所需要的计数值设定设计数器从初值开始作加1计数到计满为全1所需要的计数值设定 为C和计数初值设定为D,由此便可得到如下的计算通式: D=M-C (1) 式中,M为计数器模值,该值和计数器工作方式有关。在方式0 时M为213;在方式1时M为216;在方式2和方式3时M为28。 3、定时器初值的计算 在定时器模式下,计数器由单片机脉冲经12分频后计数。因此, 定时器定时时间T的计算公式为: T=(TM—TC)12/fOSC (µs) (2) 式中TM为计数器从初值开始作加1计数到计满为全1所需要的时 间,TM为模值,和定时器的工作方式有关;fOSC是单片机晶体 振荡器的频率,TC为定时器的定时初值。
在式(2)中,若设TC=0,则定时器定时时间为 最大(初值为0,计数从全0到全1,溢出后又为 全0)。由于M的值和定时器工作方式有关,因 此不同工作方式下定时器的最大定时时间也不一 样。例如:若设单片机主脉冲晶体振荡器频率 fOSC为12MHz,则最大定时时间为: 方式0时 TMmax=213×1µS=8.192ms 方式1时 TMmax=216 ×1µs=65.536ms 方式2和3时 TMmax=28 ×1µs=0.256ms
定时/计数器应用举例 • 用定时/计数器T0模式0进行定时,在P1.0引脚上输出周期为1ms的方波。设单片机晶振频率fOSC=12MHZ。 1.确定定时器T0的模式控制字TMOD 由于定时时间不长,取模式0,M1M0=00; T0工作于定时器方式, =0; T0用软件控制运行,GATE=0 TMOD的高4位用于设置T1,因T1不用,可为任意值,通常取0值。 所以,TMOD=00H。
2.计算计数初值 ∵ t =(213-X)×12/fOSC 1000=(213-X)×12/6 ∴ X=213-6×1000/12 =7692=11110000 01100B 高8位 低5位 因为模式0时TL0的高3位未用,应填写0所以实际值为 X=11110000 00001100B =F00CH • 即 TH0=F0H,TL0=0CH。
3.编制初始化程序 可用查询方式和中断方式 2种方法来编制源程序。 • 查询方式 中断方式
由于本例中的定时时间不长,因此可用定时器一次定时完成。如果要求的定时时间较长,而定时器无法用一次定时完成的情况下,就要进行重复定时,通过累加定时器每次定时时间的方法来达到所需的定时要求。 • 【例】用定时/计数器T1定时,使P1.0引脚输出周期为2s的方波。已知单片机的晶振频率fOSC=12MHZ。 • 本例中设定T1的定时时间为50ms,要达到1s的定时值,需累计20次。
定时/计数器初始化编程,可按以下步骤进行 • 1.确定T1的模式控制字TMOD T1工作于模式1,由TR1控制启动与关闭,T0不用。故TMOD=10H。 • 2.计算计数初值 t =(216-X)×12/fOSC 50000=(216-X)×12/12 X =216-50000 =15536=0011110010110000B =3CB0H