第四章定时计数器(2)_第1页
第四章定时计数器(2)_第2页
第四章定时计数器(2)_第3页
第四章定时计数器(2)_第4页
第四章定时计数器(2)_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章 单片机的中端系统及定时器/计数器4.2 定时/计数器微波炉中的定时器微波炉中的定时器2设定加热一只鸡的时间为15分钟(900s),启动后微波炉开始倒计时,并在显示屏上显示剩余时间。单片机每过1s 更新一次显示时间,当更新显示900次后就让微波炉停止加热。自行车上的计数器自行车上的计数器3霍尔开关每当车轮转过一圈时磁铁接近一次霍尔开关,于是就会输出一个脉冲。如果把这个脉冲输入单片机,单片机可以在每次脉冲到来时计一个数,假设60秒内单片机的计数值为n,车轮的半径为r,于是车轮的周长为C=2r,得自行车的行驶速度为:226060CrrnVTn4计数器的容量计数器的容量 8051单片机内部有两

2、个计数器,分别称为T0和T1,这两个计数器分别由两个两个8位位的RAM单元组成,即每个计数器都是16位的计数器,最大的计数量是65536。溢出 来看水滴的例子,当水持续落下,最终有一滴水使得盆中的水满了。这时如果再有一滴水落下,水会溢出来。单片机计数器的容量是16位,也就是说,最大的计数值为65536,因此计数计到65536时就会产生溢出。一旦产生溢出,单片机内部定时器控制寄存器一旦产生溢出,单片机内部定时器控制寄存器TCON中中的的TF0/TF1变为变为“1”。定时计数器的工作原理定时计数器的工作原理 计数器的最大的计数值为65536,因此计数计到65536就会产生溢出。如果要计数100,就

3、先往计数器中放进65436,再来100个脉冲,就会产生溢出。 定时也是如此,假如每个脉冲是1s,则计满65536个脉冲需时65.536ms。如果只要定时10ms,10ms为10000s,所以,只要在计数器里面放进55536就可以了。定时器/计数器的方式寄存器TMOD TMOD在特殊功能寄存器中,字节地址为89H定时器/计数器的控制字(1)GATE位:门控位。当GATE=0时,只要TCON中的TR0为1就能使计数器工作。当GATE=1和TR0=1时,是否计数取决于INT0引脚的信号,当INT0由0变为1时,开始计数;当INT0由1变为0时,停止计数。(2)C/T位:计数器模式和定时器模式的选择位

4、。C/T=0时,为定时器模式。C/T=1时,为计数器模式。 (3)M1M0:4种工作方式的选择位。通过对M1M0的设置,可使定时器工作于4种工作方式之一,如表6-1所示。TCONTCON寄存器寄存器TF0/TF1(TCON.5/7),定时器溢出标志位),定时器溢出标志位=0=0:定时器未溢出;:定时器未溢出;=1=1:定时器溢出。:定时器溢出。TR0/TR1TR0/TR1:定时器运行启停控制位:定时器运行启停控制位: =0=0:定时器停止运行;:定时器停止运行; =1=1:定时器启动运行。:定时器启动运行。工作方式工作方式1: 16位定时位定时/计数器计数器在这种方式下,由TH0的8位和TL0

5、的8位组成一个16位计数器。最大计数值为65536。当16位计数器从设定的初值不断加1直到溢出时,置置TCON的的TF0位为位为1,系统把计数器清,系统把计数器清“0”。工作方式工作方式0: 13位定时位定时/计数器计数器在这种方式下,由TH0的8位和TL0的低5位组成一个13位计数器。最大计数值为8192。当16位计数器从设定的初值不断加1直到溢出时,置置TCON的的TF0位为位为1,系统把计数器清,系统把计数器清“0”。P122【例例4-9】P2.0接LED,高电平亮,单片机所接晶振12MHz,用定时器的查询方式实现灯的闪烁。要求亮、暗间隔60ms。 R2220XTAL218XTAL119

6、ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT8

7、9C51C122pFC222pFC310uFX112MR110kD1P122【例例4-9】P2.0接LED,高电平亮,单片机所接晶振12MHz,用定时器的查询方式实现灯的闪烁。要求亮、暗间隔60ms。 分析:分析:每个机器周期为1s,使用工作方式1,可以定时65.536ms;方式0可以定时8.192ms 假设应用的是定时器1,工作在方式1,利用TMOD设置方法可知TMOD=00010000B。 需要往定时器里放入预置数: 65536-60ms/1s =5536=15A0H. 程序清单如下: ORG 0000H AJMP MAIN ORG 0030H MAIN:MOV P2, #00H ;关所有

8、的灯 MOV TMOD, #00010000B;定时器/计数器1工作于方式1 MOV TH1, #15H MOV TL1, #0A0H;预置数5536 SETB TR1 ;定时器定时器/计数器计数器1开始运行开始运行 LOOP:JBC TF1,NEXT ;若TF1为1清TF1并转NEXT处 AJMP LOOP ;否则跳转到LOOP处运行 NEXT:CPL P2.0 MOV TH1, #15H MOV TL1,#0A0H ;重置定时器重置定时器/计数器的初值计数器的初值 AJMP LOOP SJMP $ END工作方式工作方式0: 13位定时位定时/计数器计数器在这种方式下,由TH0的8位和TL

9、0的低5位组成一个13位计数器。最大计数值为8192。当16位计数器从设定的初值不断加1直到溢出时,置置TCON的的TF0位为位为1,系统把计数器清,系统把计数器清“0”。工作方式工作方式2:自动装载初值的:自动装载初值的8位定时器位定时器 方式2把TL0配置成一个可以自动恢复初值的8位计数器,TH0作为常数缓冲器,由软件预置值。 当TL0产生溢出时,一方面使溢出标志TF0置1,同时把TH0中的8位数据重新装入TL0中。此动作是由硬件自动完成此动作是由硬件自动完成的,不需要软件,这不同于方式的,不需要软件,这不同于方式0和方式和方式1。 工作方式3 在这种工作方式下T0被拆成两个独立的定时器/

10、计数器来用。 TL0可以构成8位的定时器或计数器的工作方式,并使用T0的控制位、TF0的中断源。 TH0则只能作为定时器来用,使用则只能作为定时器来用,使用T1中的中的TR1、TF1的中断的中断源。源。 工作方式3 需要注意的是,方式3是将T0拆成两个独立的8位定时器/计数器来用,而不是T1,如果把T1置于方式3,T1将处于关闭状态。 一般情况下,T0以工作方式3状态运行,仅在T1工作于方工作于方式式2而且不要求中断的前提下而且不要求中断的前提下才可以使用,此时T1可被用作串行口波特率发生器。 方式方式3特别适合于单片机需要特别适合于单片机需要1个独立的定时器个独立的定时器/计数器、计数器、1

11、个定时器及个定时器及1个串行口波特率发生器的情况。个串行口波特率发生器的情况。定时器/计数器的预置数的计算方法 1计数器初值的计算 把计数器从初值开始作加1计数到计满溢出所需要的计数值设定为C,计数初值设定为D,由此便可得到以下的计算通式:D=M-C (6-1) 式中,M为计数器模值,该值和计数器工作方式有关,在方式0时M为213 ,在方式1时M为216 ,在方式2和方式3时M为2 8 。 2定时器初值的计算 在定时器模式下,定时器定时时间T的计算公式为:T=(TM-TC)12/fOSCs (6-2) 式中,TM为计数器从初值开始作加1计数到计满溢出所需要的时间,TM为模值,与定时器的工作方式

12、有关;fOSC是单片机晶体振荡器的频率;TC为定时器的定时初值。在式(6-2)中,若设TC =0,则定时器定时时间为最大(初值为0,计数从全0到全1,溢出后又为全0)。 【例【例6-1】设T0在方式0下工作,定时时间为1ms,时钟振荡频率为6MHz。计算预置数。 解:将数据代入公式(6-2)得:(213-TC)12/6 s =1ms=1000sTC=213 -500=7692=1E0CH=1111000001100B 因为TL1的高3位没用,对计算出的TC要进行修正,即在低5位前插入3个0,修正后的定时初值X=1111000000001100B=F00CH。可用下列指令实现。MOV TL0,#

13、0CH;5位送TL0寄存器 MOV TH0,#0F0H ;8位送T0寄存器 13【例例4-6】若单片机时钟频率fOSC为12MHz,请计算定时2ms所需的定时器初值。 解:由于定时器工作在方式2和方式3下时的最大定时时间只有0.256ms,要定时2ms,则要用到循环程序,因此用方式0或方式1较方便。 若采用方式0,则根据式(6-2)可得定时器初值为:TC=213 -2ms/1s=6129 利用计算机附件中的计算器可将6129转换为十六进制数为1830H。注意:这不是定时器工作在方式0时的初值,因定时器工作在方式0时是13位,高字节8位,低字节5位,所以还要进行适当的变换,修正后为C110H。即

14、:TH0应预置C1H,TL0应预置10H(高3位为0)。 若采取方式1,则有: TC=216-2ms/1s=63536=F830H 即:TH0应预置F8H,TL0应预置30H。程序清单如下: ORG 0000H AJMP MAIN ORG 0030H MAIN:MOV P2, #00H ;关所有的灯 MOV TMOD, #00010000B;定时器/计数器1工作于方式1 MOV TH1, #15H MOV TL1, #0A0H;预置数5536 SETB TR1 ;定时器定时器/计数器计数器1开始运行开始运行 LOOP:JBC TF1,NEXT ;若TF1为1清TF1并转NEXT处 AJMP L

15、OOP ;否则跳转到LOOP处运行 NEXT:CPL P2.0 MOV TH1, #15H MOV TL1,#0A0H ;重置定时器重置定时器/计数器的初值计数器的初值 AJMP LOOP SJMP $ ENDlEA:总允许位(一级控制)。EA=0时,禁止一切中断;EA=1时,中断开放。lET1、ET0:定时器T1、T0允许位,ET1=1或ET0=1时,允许TF1或TF0引发中断,否则禁止相应的定时器中断。定时定时/ /计数中断计数中断 -TCON-TCON的定时的定时/ /计数器中断标志计数器中断标志TF0/TF1(TCON.5/7),定时器溢出中断请求位),定时器溢出中断请求位=0=0:定

16、时器未溢出;:定时器未溢出;=1=1:定时器溢出申请中断,进中断后自动清零。:定时器溢出申请中断,进中断后自动清零。TR0/TR1TR0/TR1:定时器运行启停控制位:定时器运行启停控制位: =0=0:定时器停止运行;:定时器停止运行; =1=1:定时器启动运行。:定时器启动运行。(2)用定时器的中断方式。 ORG 0000H AJMP MAIN ORG 001BH ;定时器1的中断向量地址 AJMPTIME1 ;跳转到真正的定时器程序处 ORG 0030H MAIN: MOV P1, #0FFH;关所有的灯 MOV TMOD, #00010000B;定时器/计数器1工作于方式1 MOV TH

17、1, #15H MOV TL1, #0A0H;预置数5536 SETBEA ;开总中断允许 SETBET1 ;开定时器/计数器1允许 SETBTR1 ;定时器/计数器1开始运行LOOP: AJMP LOOP ; 真正工作时,这里可写任意程序TIME1: PUSHACC ; 定时器1的中断处理程序 PUSHPSW ; 将PSW和ACC压入堆栈保护 CPL P1.0 MOV TH1, #15H MOV TL1,#0A0H; 重置定时常数重置定时常数 POP PSW POP ACC RETI ; 中断返回 END定时器定时器/计数器的初始化步骤:计数器的初始化步骤: (1)确定工作方式(即对TMOD

18、赋值)。 (2)预置定时或计数的初值(可直接将初值写入TH0、TL0或TH1、TL1)。 (3)根据需要开放定时器/计数器的中断(直接对IE位赋值)以及给中断优先级寄存器IP选送中断优先级字,以开放相应中断和设定中断优先级。 (4)启动定时器/计数器。若用软件启动,则可把TR0或TR1置1;若由外部中断引脚电平启动,则需给外部引脚加启动电平。 【例例4-7】设T1作定时器用,以方式1工作,定时时间为10ms;T0作计数器,以方式2工作,外界发生一次事件即溢出,写出初始化程序。 解解:T1的时间常数为: (216-TC)2s=10ms TC=EC78H 程序:MOVTMOD,#16H ;T1定时

19、方式1,T0计数方式2,即置TMOD寄存器的内容为00010110B MOVTL0,#0FFH;T0时间常数送TL0 MOVTH0,#0FFH;T0时间常数送TH0 MOVTL1,#78H ;T1时间常数(低8位)送TL1 MOVTH1,#0ECH;T1时间常数(高8位)送TH1 SETBTR0;置TR0为1允许T0启动计数 SETBTR1;置TR1为1允许T1启动计数【例例4-8】设定时器T0以方式1工作,编写一个延时1s的子程序。 解解:若主频为6MHz,可求得T0的最大定时时间为:TM max=216 2s=131.072ms 用定时器获得100ms的定时时间再加10次循环得到1s的延时

20、,可算得100ms定时的预置数为: (216-TC)2s=100000s=100ms TC=216-50000=15536 TC=3CB0H程序如下: ORG0200H MOVTMOD,#01H ;T0工作方式1 MOVR7,#10 ;循环次数 TIME: MOVTL0,#0B0H;放预置数 MOVTH0,#3CH SETB TR0 ;启动定时器0 LOOP1: JBC TF0,LOOP2 ;查询TF0标志看是否计满 JMP LOOP1 LOOP2: DJNZ R7,TIME ;进行10个100ms及1s的计时 SJMP $ END【例例4-10】P1.0接LED,低电平亮,单片机所接晶振12

21、MHz,用定时器中断方式实现灯的闪烁。要求亮、暗间隔1s。解: ORG 0000H AJMP MAIN ORG 001BH ; 定时器1的中断向量地址 AJMP TIME1 ; 跳转到真正的定时器程序处 ORG 0030HMAIN: MOV P1,#0FFH ; 关所有灯 MOV 30H,#00H ; 循环次数清循环次数清0 MOV TMOD, #00010000B ; 定时器定时器/计数器计数器1工作于方式工作于方式1 MOV TH1, #3CH MOV TL1,#0B0H; 即数即数15536(一次定时一次定时50ms的初值的初值) SETB EA ; 开总中断允许开总中断允许 SETB ET1 ; 开定时

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论