合肥工业大学单片机鲁昌华第五章_第1页
合肥工业大学单片机鲁昌华第五章_第2页
合肥工业大学单片机鲁昌华第五章_第3页
合肥工业大学单片机鲁昌华第五章_第4页
合肥工业大学单片机鲁昌华第五章_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、第第5章章 MCS-51的定时器的定时器/计数器计数器 5.1 定时器定时器/计数器的结构计数器的结构 5.2 定时器定时器/计数器的工作原理计数器的工作原理 5.3 定时器定时器/计数器的控制计数器的控制 5.4 定时器定时器/计数器的工作方式计数器的工作方式 5.5 定时器定时器/计数器的精度计数器的精度 5.6 定时器定时器/计数器的程序设计及应用实例计数器的程序设计及应用实例5.1 定时器定时器/ /计数器的结构计数器的结构图图5-1 定时器定时器/计数器结构图计数器结构图特殊功能寄存器特殊功能寄存器TH0、TL0、TH1、TL1、TMOD、TCON5.2 定时器定时器/ /计数器的工

2、作原理计数器的工作原理 两个16位的定时/计数器T0(TH0TL0)和T1 (TH1TL1),基本工作原理是加1计数,即对指定的脉冲信号进行加1操作,直到出现溢出。 (1)定时器,对机器周期加1计数,因此,计数周期固定为12/ (2)计数器,对单片机外部输入的脉冲信号加1计数,T0(P3.4),T1(P3.5) OSCf5.3 定时器定时器/计数器的控制计数器的控制5.3.1 定时器定时器/计数器方式控制寄存器计数器方式控制寄存器TMOD TMOD用于控制定时器/汁数器的工作模式及工作方式,其字节地址为80H,格式如下。其中,低4位用于决定T0的工作方式,高4位用于决定T1的工作方式。1、M1

3、和M0工作方式控制位M0和和M1为工作方式控制位,确定为工作方式控制位,确定4种工作方式,如种工作方式,如表表5-1所示。所示。定时器/计数器方式选择位 =0,定时方式,对机器周期进行计数; =1,计数方式,对外部信号进行计数,外部信号接至T0(P3.4)或T1(P3.5)引脚。3、GATE门控位 GATE=0时,只要用软件使TR0(或TR1)置1就能启动定时器T0(或T1); GATE=1时,只有在INT0(或INT1)引脚为高电平的情况下,且由软件使TR0(或TR1)置1时,才能启动定时器T0(或T1)工作CT/CT/CT/5.3.2 定时器/计数器的控制寄存器TCON 控制寄存器TCON

4、的位地址是88H,可以对它进行位寻址。其功能:启动:设定好了定时器/计数器的工作方式后,通过设置控制寄存器TCON中的相应位来启动。 (2)停止:要使定时器/计数器停止运行,也通过设置TCON中的相应位来实现。 (3)标志:TCON能标明溢出和中断情况。1. TR0:定时器T1运行控制位。可由软件置1(或清零)来启动(或关闭)定时器T0,使定时器T0开始计数。 2. TF0:定时器T0溢出标志位。当定时器T0溢出时,由硬件自动使TF1置1,并向CPU申请中断。CPU响应中断后,自动对TF0清零。TF0也可以用软件查询和清零。3. TR1 :定时器T1运行控制位。功能与TR0 相同。4. TF0

5、 :定时器T0溢出标志位。功能与TF0相同。 IE1:外部中断1请求标志位。 IT1:外部中断1触发方式控制位。 IE0:外部中断0请求标志位。 IT0:外部中断0触发方式控制位。 5.4 定时器/计数器的工作方式5.4.1 工作方式0(M1 M0:00) 定时器/计数器工作在方式0时,16位计数器只用了13位,即THx的高8位和TLx的低5位,组成一个13位定时器/计数器。(x=0或1)图5-2 定时器计数器方式0结构框图 5.4.2 工作方式1 (M1 M0:01) 定时器/计数器工作在方式0时,16位计数器,即THx作为高8位,TLx作为低8位。 图5-3 定时器计数器方式1结构框图5.

6、4.3 工作方式2 (M1 M0:10) 自动重装初值8位计数器。TLx作为8位计数器, THx用作常数寄存器。 TLx计数满产生溢出时,一方面置1溢出标志TFx;另一方面自动将THx中的内容送至TLx ,使8位定时器/计数器从所装初值开始更新开始计数。 图5-4 定时器计数器方式2结构框图5.4.4 工作方式3 (M1 M0:11)将16位的计数器T0分为两个独立的8位计数器TH0和TL0。定时器T1只能工作在方式02,不需中断的场合。 图5-5 定时器计数器方式3结构框图5.5 定时器/计数器的精度 定时: 对机器周期(即12/ fosc )计数。精度取决于输入脉冲的周期,因此当需要高分辨

7、率的定时时,应尽量选用频率较高的晶振(MCS-51最高为12MHz)。 如:fosc=12MHz时,机器周期1微秒,计数脉冲周期间隔为1微秒,误差为1微秒。 fosc=6MHz时,机器周期2微秒,计数脉冲周期间隔为2微秒,误差为2微秒。 注:在使用中断情况下,如果有其它中断服务正在执行,延迟取决于其它中断服务程序执行的时间。 计数:由于确认一次下跳变要花两个机器周期的时间,因此外部输入的计数脉冲的最高频率为振荡器频率的1/24。且高低电平至少保持一个机器周期Tcy 。 Tcy:一个机器周期 另外,在读取运行中的定时器计数器时,需要加以注意,否则读取的计数值有可能出错。原因是不可能在同一时刻同时

8、读取THx和TLx的内容。 一种解决读错问题的方法是:先读(THx),后读(TLx),再读(THx),若两次读得的(THx)相同,则可确定读得的内容是正确的。 如下面的程序,读得的(TH0)和(TL0)分别放置在R1和R0内。RDTIME: MOV A,TH0 ;读(TH0) MOV R0,TL0 ;读(TL0) CJNE A,TH0,RDTIME ;比较两次读得的(TH0) MOV R1,A RET5.6 定时器/计数器的程序设计及应用使用定时器/计数器时必须计算计数初值。假设T为定时时间,计数器位数为n,系统时钟频率为fosc,计数初值为x,则它们满足下列关系式:T122oscfxn212

9、fnoscxT即 【例5-1】利用定时器T0产生1ms定时。由P1.0输出占空比为1:1的周期为2ms的方波信号。(设时钟频率为6MHZ)。 1. 确定计数初值 由于时钟频率为6MHZ,所以,机器周期为:12/fosc=2s t=(-T0初值) 机器周期当t=1ms时,(-T0初值) 2=1 解得:T0初值=7692=1111000001100B 高8位11110000B=0F0H赋给TH0, 低5位01100B=0CH赋给TL0。设计程序 MOV TMOD , #00H;设定T0的工作方式 SETB TR0; 启动T0工作LOOP: MOV TH0 , #0F0H; 给定时器T0送初值 MO

10、V TL0 , #0CH LOOP1: JNB TF0 , $; $为当前指令指针地址 CLR TF0 CPL P1.0 SJMP LOOP【例5-2】 用定时器T0产生25HZ的方波。由P1.0输出此方波(设时钟频率为12MHZ)。25HZ的方波周期为40ms,可用定时器产生20ms的定时,每隔20ms改变一次P1.0的电平,即可得25HZ的方波。 1. 确定计数初值 由于时钟频率为12MHZ,所以,机器周期为:12/fosc=1s t=(2 -T0初值) 机器周期当t=20ms时,(-T0初值) 1=20 解得:T0初值=45536=0B1E0H 高8位0B1H赋给TH0, 低8位0E0H

11、赋给TL0。 2.设计程序 MOV TMOD, #01H;设定T0的工作方式1 SETB TR0; 启动T0工作LOOP: MOV TH0, #0B1H;给定时器T0送初值 MOV TL0 , #0E0H LOOP1: JNB TF0, $; $为当前指令指针地址 CLR TF0 CPL P1.0 SJMP LOOP【例5-3】 用定时器T1产生500us的定时。由P1.0输出周期为1ms的方波(设时钟频率为6MHZ)。 1ms的方波,可用定时器产生500us的定时,每隔500us改变一次P1.0的电平。 1. 确定计数初值 由于时钟频率为6MHZ,所以,机器周期为:12/fosc=2s t=

12、(2 -T1初值) 机器周期当t= 500us时,(2 -T1初值) 210 =500 10解得:T1初值=06H 06H赋给TL1, 06H同时赋给TH1。 2.设计程序 MOV TMOD , #20H;设定T1的工作方式2 MOV TH1, #06H; 给定时器T1送初值 MOV TL1, #06H SETB TR1; 启动T1工作LOOP: JNB TF1 , $; $为当前指令指针地址 CLR TF1 CPL P1.0 SJMP LOOPT0的中断服务程序:IT0P: MOVTH0,#3CH;T0重新赋值MOVTL0,#0B0HCPLP1.7;P1.7取反作T1的计数脉冲 RETI;中

13、断返回T1的中断服务程序:IT1P: CPLP1.0;P1.0取反输出RETIEND例5.4 由P3.4(T0)引脚输入一个频率小于0.5kHz的低频脉冲信号,要求P3.4每发生一次负跳变时,P1.0输出一个500s的同步负脉冲,同时P1.1输出一个1ms的同步正脉冲。已知晶振频率为fosc=6MHz。解题分析:按题意画出输出信号的波形如图5.12所示。 P1.0 P3.4 P1.1 1ms 1ms 500s 500s 设初态P1.0输出高电平,P1.1输出低电平。设T0以工作方式2计数,计数初值为FFH。当加在引脚T0上的外部脉冲产生由1至0的负跳变时,则使T0计数器加1 而产生溢出,进入中

14、断服务程序。在中断服务程序中,T0改变为以工作方式2定时500s,并且使P1.0输出低电平,P1.1输出高电平。当第一次定时500s到时,定时器溢出后,使P1.0恢复为高电平,T0继续第二次500s定时,产生溢出后,使P1.1恢复为低电平。然后T0又恢复对外部脉冲进行计数,如此循环。 500s定时计数初值: (28-X)210-6=50010-6 求解得:X=06H。主程序:ORG0000HLJMPMAINORG000BH;T0中断服务程序入口LJMPIT0PORG0030HMAIN: MOV SP,#60H ;堆栈设置为内部RAM 为60H MOVTMOD,#06H;设置T0工作方式2,计数

15、方式MOVTH0,#0FFH;设置T0计数初值MOVTL0,#0FFHSETBEA;中断总允许SETBET0;定时器0允许中断SETBP1.0;P1.0初态为高电平CLRP1.1;P1.1初态为低电平SETBTR0;启动定时器0SJMP$;等待中断T0的中断服务程序:IT0P: CLRTR0;关闭定时器0MOVTMOD,#02H;设置T0为方式2,定时MOVTH0,#06H;设置T0计数初值MOVTL0,#06HMOVIE,#00H;禁止中断CLRP1.0;P1.0为低电平SETBP1.1;P1.1为高电平SETBTR0;启动定时器0LOOP1:JBCTF0,LP1;第一个500s到否SJMP

16、LOOP1 ;未到等待LP1: SETBP1.0 ;到了P1.0变为高电平LOOP2:JBCTF0,LP2;第二个500s到否SJMPLOOP2LP2: CLRP1.1;到了P1.1变为低电平 CLRTR0;关闭定时器0MOVTMOD,#06H;T0重新设为方式2,计数MOVTH0,#0FFH;T0重新赋初值MOVTL0,#0FFHMOVIE,#82H;定时器0中断允许SETBTR0;启动定时器0RETI;中断返回END 例5.5 利用两个定时器控制一个接P1.0的发光二极管亮1秒、暗1秒,周而复始。已知晶振频率为fosc=6MHz。解题分析:两个定时器中一个用于定时,另一个用于计数。定时的时

17、间到可以输出一个控制信号作为另一个定时器的计数脉冲。线路连接如图5.11所示。 VCC P1.0 8031 P1.7 T1(P3.5) 5.1k 设T0以工作方式1定时100ms,T1以工作方式2计数。当T0定时100 ms时,控制P1.7输出取反,P1.7输出周期为200ms的方波作为T1的计数脉冲,T1计数满溢出控制P1.0取反,所以当T1计满5次,P1.0输出的脉宽为1s的方波。 T0的计数初值:(216-X)210-6=10010-3 求解得:X=3CB0H。 T1的计数初值: 28-5=251=FBH。TMOD寄存器初始化: T0:M1M0=01; C/T=0; GATE=0。 T1:M1M0=10; C/T=1; GATE=0。 因此(TMOD)=61H。主程序:ORG0000HAJMPMAINORG000BH;T0中断服务程序入口AJMPIT0PORG001BH;T1中断服务程序入口AJMPIT1PORG0100HMAIN: CLRP1.7;P1.7初态为低电平MOVTMOD,#61H;设置T0方式

温馨提示

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

评论

0/150

提交评论