合肥工业大学单片机鲁昌华第五章资料

上传人:suns****4568 文档编号:93420445 上传时间:2019-07-22 格式:PPT 页数:34 大小:790KB
返回 下载 相关 举报
合肥工业大学单片机鲁昌华第五章资料_第1页
第1页 / 共34页
合肥工业大学单片机鲁昌华第五章资料_第2页
第2页 / 共34页
合肥工业大学单片机鲁昌华第五章资料_第3页
第3页 / 共34页
合肥工业大学单片机鲁昌华第五章资料_第4页
第4页 / 共34页
合肥工业大学单片机鲁昌华第五章资料_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《合肥工业大学单片机鲁昌华第五章资料》由会员分享,可在线阅读,更多相关《合肥工业大学单片机鲁昌华第五章资料(34页珍藏版)》请在金锄头文库上搜索。

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、TCON,5.2 定时器/计数器的工作原理,两个16位的定时/计数器T0(TH0TL0)和T1 (TH1TL1),基本工作原理是加1计数,即对指定的脉冲信号进行加1操作,直到出现溢出。 (1)定时器,对机器周期加1计数,因此,计数周期固

2、定为12/ (2)计数器,对单片机外部输入的脉冲信号加1计数,T0(P3.4),T1(P3.5),5.3 定时器/计数器的控制 5.3.1 定时器/计数器方式控制寄存器TMOD,TMOD用于控制定时器/汁数器的工作模式及工作方式,其字节地址为80H,格式如下。其中,低4位用于决定T0的工作方式,高4位用于决定T1的工作方式。,1、M1和M0工作方式控制位 M0和M1为工作方式控制位,确定4种工作方式,如表5-1所示。,2、 定时器/计数器方式选择位 =0,定时方式,对机器周期进行计数; =1,计数方式,对外部信号进行计数,外部信号接至T0(P3.4)或T1(P3.5)引脚。 3、GATE门控位

3、 GATE=0时,只要用软件使TR0(或TR1)置1就能启动定时器T0(或T1); GATE=1时,只有在INT0(或INT1)引脚为高电平的情况下,且由软件使TR0(或TR1)置1时,才能启动定时器T0(或T1)工作,5.3.2 定时器/计数器的控制寄存器TCON 控制寄存器TCON的位地址是88H,可以对它进行位寻址。其功能: (1)启动:设定好了定时器/计数器的工作方式后,通过设置控制寄存器TCON中的相应位来启动。 (2)停止:要使定时器/计数器停止运行,也通过设置TCON中的相应位来实现。 (3)标志:TCON能标明溢出和中断情况。,1. TR0:定时器T1运行控制位。可由软件置1(

4、或清零)来启动(或关闭)定时器T0,使定时器T0开始计数。 2. TF0:定时器T0溢出标志位。当定时器T0溢出时,由硬件自动使TF1置1,并向CPU申请中断。CPU响应中断后,自动对TF0清零。TF0也可以用软件查询和清零。 3. TR1 :定时器T1运行控制位。功能与TR0 相同。 4. TF0 :定时器T0溢出标志位。功能与TF0相同。 IE1:外部中断1请求标志位。 IT1:外部中断1触发方式控制位。 IE0:外部中断0请求标志位。 IT0:外部中断0触发方式控制位。,5.4 定时器/计数器的工作方式,5.4.1 工作方式0(M1 M0:00) 定时器/计数器工作在方式0时,16位计数

5、器只用了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.4.3 工作方式2 (M1 M0:10) 自动重装初值8位计数器。TLx作为8位计数器, THx用作常数寄存器。 TLx计数满产生溢出时,一方面置1溢出标志TFx;另一方面自动将THx中的内容送至TLx ,使8位定时器/计数器从所装初值开始更新开始计数。,图5-4 定时器计数器方式2结构框图,

6、5.4.4 工作方式3 (M1 M0:11) 将16位的计数器T0分为两个独立的8位计数器TH0和TL0。定时器T1只能工作在方式02,不需中断的场合。,图5-5 定时器计数器方式3结构框图,5.5 定时器/计数器的精度 定时: 对机器周期(即12/ fosc )计数。精度取决于输入脉冲的周期,因此当需要高分辨率的定时时,应尽量选用频率较高的晶振(MCS-51最高为12MHz)。 如:fosc=12MHz时,机器周期1微秒,计数脉冲周期间隔为1微秒,误差为1微秒。 fosc=6MHz时,机器周期2微秒,计数脉冲周期间隔为2微秒,误差为2微秒。 注:在使用中断情况下,如果有其它中断服务正在执行,

7、延迟取决于其它中断服务程序执行的时间。,计数:由于确认一次下跳变要花两个机器周期的时间,因此外部输入的计数脉冲的最高频率为振荡器频率的1/24。且高低电平至少保持一个机器周期Tcy 。 Tcy:一个机器周期,另外,在读取运行中的定时器计数器时,需要加以注意,否则读取的计数值有可能出错。原因是不可能在同一时刻同时读取THx和TLx的内容。 一种解决读错问题的方法是:先读(THx),后读(TLx),再读(THx),若两次读得的(THx)相同,则可确定读得的内容是正确的。 如下面的程序,读得的(TH0)和(TL0)分别放置在R1和R0内。 RDTIME: MOV A,TH0 ;读(TH0) MOV

8、R0,TL0 ;读(TL0) CJNE A,TH0,RDTIME ;比较两次读得的(TH0) MOV R1,A RET,5.6 定时器/计数器的程序设计及应用 使用定时器/计数器时必须计算计数初值。假设T为定时时间,计数器位数为n,系统时钟频率为fosc,计数初值为x,则它们满足下列关系式:,即,【例5-1】利用定时器T0产生1ms定时。由P1.0输出占空比为1:1的周期为2ms的方波信号。(设时钟频率为6MHZ)。,1. 确定计数初值 由于时钟频率为6MHZ,所以,机器周期为:12/fosc=2s t=(213-T0初值) 机器周期 当t=1ms时,(213-T0初值) 210-6=1 10

9、-3 解得:T0初值=7692=1111000001100B 高8位11110000B=0F0H赋给TH0, 低5位01100B=0CH赋给TL0。,设计程序 MOV TMOD , #00H;设定T0的工作方式 SETB TR0; 启动T0工作 LOOP: MOV TH0 , #0F0H; 给定时器T0送初值 MOV TL0 , #0CH LOOP1: JNB TF0 , $; $为当前指令指针地址 CLR TF0 CPL P1.0 SJMP LOOP,【例5-2】 用定时器T0产生25HZ的方波。由P1.0输出此方波(设时钟频率为12MHZ)。 25HZ的方波周期为40ms,可用定时器产生2

10、0ms的定时,每隔20ms改变一次P1.0的电平,即可得25HZ的方波。 1. 确定计数初值 由于时钟频率为12MHZ,所以,机器周期为:12/fosc=1s t=(216-T0初值) 机器周期 当t=20ms时,(216-T0初值) 110-6=20 10-3 解得:T0初值=45536=0B1E0H 高8位0B1H赋给TH0, 低8位0E0H赋给TL0。,2.设计程序 MOV TMOD, #01H;设定T0的工作方式1 SETB TR0; 启动T0工作 LOOP: MOV TH0, #0B1H;给定时器T0送初值 MOV TL0 , #0E0H LOOP1: JNB TF0, $; $为当

11、前指令指针地址 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=(28-T1初值) 机器周期 当t= 500us时,(28-T1初值) 210-6=500 10-6 解得:T1初值=06H 06H赋给TL1, 06H同时赋给TH1。,2.设计程序 MOV TMOD , #20H;设定T1的工作方式2 MOV T

12、H1, #06H; 给定时器T1送初值 MOV TL1, #06H SETB TR1; 启动T1工作 LOOP: JNB TF1 , $; $为当前指令指针地址 CLR TF1 CPL P1.0 SJMP LOOP,T0的中断服务程序: IT0P: MOV TH0,#3CH ;T0重新赋值 MOV TL0,#0B0H CPL P1.7 ;P1.7取反作T1的计数脉冲 RETI ;中断返回 T1的中断服务程序: IT1P: CPL P1.0 ;P1.0取反输出 RETI END,例5.4 由P3.4(T0)引脚输入一个频率小于0.5kHz的低频脉冲信号,要求P3.4每发生一次负跳变时,P1.0输

13、出一个500s的同步负脉冲,同时P1.1输出一个1ms的同步正脉冲。已知晶振频率为fosc=6MHz。 解题分析:按题意画出输出信号的波形如图5.12所示。,设初态P1.0输出高电平,P1.1输出低电平。设T0以工作方式2计数,计数初值为FFH。当加在引脚T0上的外部脉冲产生由1至0的负跳变时,则使T0计数器加1 而产生溢出,进入中断服务程序。在中断服务程序中,T0改变为以工作方式2定时500s,并且使P1.0输出低电平,P1.1输出高电平。当第一次定时500s到时,定时器溢出后,使P1.0恢复为高电平,T0继续第二次500s定时,产生溢出后,使P1.1恢复为低电平。然后T0又恢复对外部脉冲进

14、行计数,如此循环。 500s定时计数初值: (28-X)210-6=50010-6 求解得:X=06H。,主程序: ORG 0000H LJMP MAIN ORG 000BH ;T0中断服务程序入口 LJMP IT0P ORG 0030H MAIN: MOV SP,#60H ;堆栈设置为内部RAM 为60H MOV TMOD,#06H ;设置T0工作方式2,计数方式 MOV TH0,#0FFH ;设置T0计数初值 MOV TL0,#0FFH SETB EA ;中断总允许 SETB ET0 ;定时器0允许中断 SETB P1.0 ;P1.0初态为高电平,CLR P1.1 ;P1.1初态为低电平

15、SETB TR0 ;启动定时器0 SJMP $ ;等待中断 T0的中断服务程序: IT0P: CLR TR0 ;关闭定时器0 MOV TMOD,#02H ;设置T0为方式2,定时 MOV TH0,#06H ;设置T0计数初值 MOV TL0,#06H MOV IE,#00H ;禁止中断 CLR P1.0 ;P1.0为低电平 SETB P1.1 ;P1.1为高电平 SETB TR0 ;启动定时器0,LOOP1: JBC TF0,LP1 ;第一个500s到否 SJMP LOOP1 ;未到等待 LP1: SETB P1.0 ;到了P1.0变为高电平 LOOP2: JBC TF0,LP2 ;第二个50

16、0s到否 SJMP LOOP2 LP2: CLR P1.1 ;到了P1.1变为低电平 CLR TR0 ;关闭定时器0 MOV TMOD,#06H ;T0重新设为方式2,计数 MOV TH0,#0FFH ;T0重新赋初值 MOV TL0,#0FFH MOV IE,#82H ;定时器0中断允许 SETB TR0 ;启动定时器0 RETI ;中断返回 END,例5.5 利用两个定时器控制一个接P1.0的发光二极管亮1秒、暗1秒,周而复始。已知晶振频率为fosc=6MHz。 解题分析:两个定时器中一个用于定时,另一个用于计数。定时的时间到可以输出一个控制信号作为另一个定时器的计数脉冲。线路连接如图5.11所示。,设T0以工作方式1定时100ms,T1以工作方式2计数。当T0

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号