第四章 定时计数器(2)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TH0作为常数缓冲器,由软件预置值。 当TL0产生溢出时,一方面使溢出标志TF0置1,同时把 TH0中的8位数据重新装入TL0中。此动作是由硬件自动完成 的,不需要软件,这不同于方式0和方式1。
工作方式3 在这种工作方式下T0被拆成两个独立的定时器/计数器来用。 TL0可以构成8位的定时器或计数器的工作方式,并使用T0 的控制位、TF0的中断源。 TH0则只能作为定时器来用,使用T1中的TR1、TF1的中断 源。
工作方式1: 16位定时/计数器 在这种方式下,由TH0的8位和TL0的8位组成一个16位计数器。
最大计数值为65536。
当16位计数器从设定的初值不断加1直到溢出时,置TCON的TF0
位为1,系统把计数器清“0”。
工作方式0: 13位定时/计数器
在这种方式下,由TH0的8位和TL0的低5位组成一个13位计数器。
(2) 用定时器的中断方式。 ORG 0000H AJMP MAIN ORG 001BH ;定时器1的中断向量地址 AJMP TIME1 ;跳转到真正的定时器程序处 ORG 0030H MAIN: MOV P1, #0FFH ;关所有的灯 MOV TMOD, #00010000B ;定时器/计数器1工作于方式1 MOV TH1, #15H MOV TL1, #0A0H ;预置数5536 SETB EA ;开总中断允许 SETB ET1 ;开定时器/计数器1允许 SETB TR1 ;定时器/计数器1开始运行
工作方式3 需要注意的是,方式3是将T0拆成两个独立的8位定时器/ 计数器来用,而不是T1,如果把T1置于方式3,T1将处于关闭 状态。 一般情况下,T0以工作方式3状态运行,仅在T1工作于方 式2而且不要求中断的前提下才可以使用,此时T1可被用作串 行口波特率发生器。 方式3特别适合于单片机需要1个独立的定时器/计数器、1 个定时器及1个串行口波特率发生器的情况。
工作方式0: 13位定时/计数器
在这种方式下,由TH0的8位和TL0的低5位组成一个13位计数器。
最大计数值为8192。 当16位计数器从设定的初值不断加1直到溢出时,置TCON的TF0 位为1,系统把计数器清“0”。
工作方式2:自动装载初值的8位定时器
方式2把TL0配置成一个可以自动恢复初值的8位计数器,
第4章
单片机的中端系统及定 时器/计数器
4.2 定时/计数器
微波炉中的定时器
设定加热一只鸡的时间为 15分钟(900s),启动后 微波炉开始倒计时,并在
Hale Waihona Puke Baidu
显示屏上显示剩余时间。
单片机每过1s 更新一次显 示时间,当更新显示900次 后就让微波炉停止加热。
2
自行车上的计数器
霍尔开关每当车轮转过一圈时 磁铁接近一次霍尔开关,于是 就会输出一个脉冲。如果把这 个脉冲输入单片机,单片机可 以在每次脉冲到来时计一个数, 假设60秒内单片机的计数值为 n,车轮的半径为r,于是车轮 的周长为C=2πr,得自行车的 行驶速度为:
13
;8位送TH0寄存器
【例4-6】若单片机时钟频率fOSC为12MHz,请计算定时 2ms所需的定时器初值。 解:由于定时器工作在方式2和方式3下时的最大定时
时间只有0.256ms,要定时2ms,则要用到循环程序,
因此用方式0或方式1较方便。
若采用方式0,则根据式(6-2)可得定时器初值为: TC=213 -2ms/1µs=6129 利用计算机附件中的计算器可将6129转换为十六进制数 为1830H。 注意:这不是定时器工作在方式0时的初值,因定时器工 作在方式0时是13位,高字节8位,低字节5位,所以还 要进行适当的变换,修正后为C110H。即:TH0应预置 C1H,TL0应预置10H(高3位为0)。
定时计数器的工作原理 计数器的最大的计数值为65536,因此计数计到65536就 会产生溢出。如果要计数100,就先往计数器中放进65436, 再来100个脉冲,就会产生溢出。
定时也是如此,假如每个脉冲是1µs,则计满65536个脉 冲需时65.536ms。如果只要定时10ms,10ms为10000µs, 所以,只要在计数器里面放进55536就可以了。
程序清单如下: ORG AJMP ORG MAIN:MOV MOV MOV MOV SETB LOOP:JBC AJMP NEXT: MOV MOV AJMP SJMP END
0000H MAIN 0030H P2, #00H ;关所有的灯 TMOD, #00010000B ;定时器/计数器1工作于方式1 TH1, #15H TL1, #0A0H ;预置数5536 TR1 ;定时器/计数器1开始运行 TF1,NEXT ;若TF1为1清TF1并转NEXT处 LOOP ;否则跳转到LOOP处运行 CPL P2.0 TH1, #15H TL1,#0A0H ;重置定时器/计数器的初值 LOOP $
定时器/计数器的预置数的计算方法 1.计数器初值的计算 把计数器从初值开始作加1计数到计满溢出所需要的计数
值设定为C,计数初值设定为D,由此便可得到以下的计算通
式: D=M-C (6-1)
式中,M为计数器模值,该值和计数器工作方式有关,在方式 0时M为213 ,在方式1时M为216 ,在方式2和方式3时M为2 8 。
后又为全0)。。
【例6-1】设T0在方式0下工作,定时时间为1ms,时钟振荡频 率为6MHz。计算预置数。
解:将数据代入公式(6-2)得: (213-TC)12/6 µs =1ms=1000µs TC=213 -500=7692=1E0CH=1111000001100B 因为TL1的高3位没用,对计算出的TC要进行修正,即在 低5位前插入3个0,修正后的定时初值 X=1111000000001100B=F00CH。可用下列指令实现。 MOV TL0,#0CH MOV TH0,#0F0H ;5位送TL0寄存器
【例4-7】设T1作定时器用,以方式1工作,定时时间为10ms; T0作计数器,以方式2工作,外界发生一次事件即溢出,写出 初始化程序。 解:T1的时间常数为: (216-TC)×2µs=10ms TC=EC78H 程序:MOV TMOD,#16H ;T1定时方式1,T0计数方式2, 即置TMOD寄存器的内容为00010110B MOV TL0, #0FFH ;T0时间常数送TL0 MOV TH0, #0FFH ;T0时间常数送TH0 MOV TL1, #78H ;T1时间常数(低8位)送TL1 MOV TH1, #0ECH ;T1时间常数(高8位)送TH1 SETB TR0 ;置TR0为1允许T0启动计数 SETB TR1 ;置TR1为1允许T1启动计数
用定时器的查询方式实现灯的闪烁。要求亮、暗间隔60ms。 分析:每个机器周期为1µs,使用工作方式1,可以定时 65.536ms;方式0可以定时8.192ms 假设应用的是定时器1,工作在方式1,利用TMOD设置方 法可知TMOD=00010000B。 需要往定时器里放入预置数:
65536-60ms/1µs =5536=15A0H.
EA:总允许位(一级控制)。EA=0时,禁止一切中断;EA=1时,
中断开放。
ET1、ET0:定时器T1、T0允许位,ET1=1或ET0=1时,允许 TF1或TF0引发中断,否则禁止相应的定时器中断。
定时/计数中断
---TCON的定时/计数器中断标志
TF0/TF1(TCON.5/7),定时器溢出中断请求位 =0:定时器未溢出; =1:定时器溢出申请中断,进中断后自动清零。 TR0/TR1:定时器运行启停控制位: =0:定时器停止运行; =1:定时器启动运行。
LOOP: TIME1:
AJMP LOOP PUSH ACC PSW P1.0
; 真正工作时,这里可写任意程序 ; 定时器1的中断处理程序 ; 将PSW和ACC压入堆栈保护
PUSH CPL
MOV
MOV POP
TH1, #15H
TL1,#0A0H PSW ; 重置定时常数
POP
RETI END
ACC
最大计数值为8192。 当16位计数器从设定的初值不断加1直到溢出时,置TCON的TF0 位为1,系统把计数器清“0”。
P122【例4-9】P2.0接LED,高电平亮,单片机所接晶振12MHz,
用定时器的查询方式实现灯的闪烁。要求亮、暗间隔60ms。
C1
22pF
U1 X1
19 XTAL1 12M 18 XTAL2 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17
C2
22pF
R1
10k
9
RST
C3
10uF 29 30 31 PSEN ALE EA
D1 R2
220
1 2 3 4 5 6 7 8
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51
P122【例4-9】P2.0接LED,高电平亮,单片机所接晶振12MHz,
定时器/计数器的控制字
定时器/计数器的方式寄存器TMOD TMOD在特殊功能寄存器中,字节地址为89H
(1)GATE位:门控位。
当GATE=0时,只要TCON中的TR0为1就能使计数器工作。 当GATE=1和TR0=1时,是否计数取决于INT0引脚的信号,当INT0 由0变为1时,开始计数;当INT0由1变为0时,停止计数。
(2)C/T位:计数器模式和定时器模式的选择位。C/T=0 时,为定时器模式。C/T=1时,为计数器模式。
(3)M1M0:4种工作方式的选择位。通过对M1M0的 设置,可使定时器工作于4种工作方式之一,如表6-1 所示。
TCON寄存器
TF0/TF1(TCON.5/7),定时器溢出标志位 =0:定时器未溢出; =1:定时器溢出。 TR0/TR1:定时器运行启停控制位: =0:定时器停止运行; =1:定时器启动运行。
; 中断返回
定时器/计数器的初始化步骤: (1)确定工作方式(即对TMOD赋值)。 (2)预置定时或计数的初值(可直接将初值写入TH0、TL0或TH1、 TL1)。 (3)根据需要开放定时器/计数器的中断(直接对IE位赋值)以及给 中断优先级寄存器IP选送中断优先级字,以开放相应中断和设 定中断优先级。 (4)启动定时器/计数器。若用软件启动,则可把TR0或TR1置1; 若由外部中断引脚电平启动,则需给外部引脚加启动电平。
2.定时器初值的计算
在定时器模式下,定时器定时时间T的计算公式为:
T=(TM-TC)12/fOSCµs (6-2)
式中,TM为计数器从初值开始作加1计数到计满溢出所需要的时 间,TM为模值,与定时器的工作方式有关;fOSC是单片机晶体 振荡器的频率;TC为定时器的定时初值。在式(6-2)中,若设TC =0,则定时器定时时间为最大(初值为0,计数从全0到全1,溢出
V C 2πr 2πrn 60 T 60 n
3
4
计数器的容量
8051单片机内部有两个计数器,分别称为T0
和T1,这两个计数器分别由两个8位的RAM单
元组成,即每个计数器都是16位的计数器,最 大的计数量是65536。
溢出
来看水滴的例子,当水持续落下,最终有一滴水使 得盆中的水满了。这时如果再有一滴水落下,水会溢出 来。单片机计数器的容量是16位,也就是说,最大的计 数值为65536,因此计数计到65536时就会产生溢出。 一旦产生溢出,单片机内部定时器控制寄存器TCON中 的TF0/TF1变为“1”。
若采取方式1,则有: TC=216-2ms/1µs=63536=F830H 即:TH0应预置F8H,TL0应预置30H。
程序清单如下: ORG AJMP ORG MAIN:MOV MOV MOV MOV SETB LOOP:JBC AJMP NEXT: MOV MOV AJMP SJMP END
0000H MAIN 0030H P2, #00H ;关所有的灯 TMOD, #00010000B ;定时器/计数器1工作于方式1 TH1, #15H TL1, #0A0H ;预置数5536 TR1 ;定时器/计数器1开始运行 TF1,NEXT ;若TF1为1清TF1并转NEXT处 LOOP ;否则跳转到LOOP处运行 CPL P2.0 TH1, #15H TL1,#0A0H ;重置定时器/计数器的初值 LOOP $
相关文档
最新文档