单片机第5章---定时器..

上传人:n**** 文档编号:93086485 上传时间:2019-07-16 格式:PPT 页数:55 大小:461KB
返回 下载 相关 举报
单片机第5章---定时器.._第1页
第1页 / 共55页
单片机第5章---定时器.._第2页
第2页 / 共55页
单片机第5章---定时器.._第3页
第3页 / 共55页
单片机第5章---定时器.._第4页
第4页 / 共55页
单片机第5章---定时器.._第5页
第5页 / 共55页
点击查看更多>>
资源描述

《单片机第5章---定时器..》由会员分享,可在线阅读,更多相关《单片机第5章---定时器..(55页珍藏版)》请在金锄头文库上搜索。

1、,第 五章 单片机的定时/计数器,在计算机控制领域,如检测、控制及智能仪器等,常常需要实时时钟来实现定时或延时控制,也常常要对外部事件进行计数。MCS-51单片机中就有两个定时/计数器,可以实现这些功能。,5.1 任务4(T4):信号灯的控制 一、要求 按照图任务1中图1.7的电路,不用任务2中的软件延时,也不用任务3中的按键,而用其它硬件方式来完成发光二极管的闪烁,间隔时间为100ms(假如使用的晶振频率为6MHz)。 二、任务分析与实现 在计算机中也经常要用到定时。定时的方法一般有2种: 1、采用软件定时 软件定时是通过反复地执行一个循环程序以进行时间的延迟,特点是时间精确,不需外加硬件电

2、路。,但要注意的是,延时程序实际上是“耗时”,要白白地占用CPU一段时间。此时CPU不能做任何其他的工作,就像机器在不停空转一样,这是程序延时的缺点。因此软件定时的时间不宜过长。 在任务2中,我们使用了一个延时子程序的方式来完成发光二极管闪烁的,通过反复执行一个循环体内的指令以累计机器周期数而实现延时。可以通过改变延时程序的参数来改变延时时间。,2、采用可编程定时器定时 在任务3中,我们是用手动按键模拟一个中断请求来完成发光二极管的亮、灭变化,时间间隔由我们手动控制。但是这样不可能达到间隔时间的精确,显然达不到任务定时间隔100ms的要求。 因此若要在延时时间精确,而在定时过程中需要CPU还能

3、做其它的工作,就需要采用单片机内部的硬件定时器或外接其他定时芯片。比如大家在微机原理中已经接触过的8253芯片,就是一个定时芯片。 MCS-51单片机内部有两个定时器,这样我们就不要外接定时芯片。本次任务就可以采用这两个定时器中的任何一个来完成“定时”,而不是延时。 利用单片机的开发系统输入下面的程序:,#include void main ( void ) TMOD = 0x01; TH0 = 0x3C; TL0 = 0xB0; EA = 1; ET0 = 1; TR0 = 1; while(1); void timer0_int (void)interrupt 1 P1 = P1;,定时器

4、0为定时状态, 工作在方式1, 启动仅有TR0控制,2个16位定时器/计数器 (52系列有3个16位Timer) 定时器:对片内机器时钟(周期方波)进行计数 计数器:对Tx引脚输入的负脉冲进行计数 T0引脚输入端:P3.4 T1引脚输入端:P3.5,与Timer工作有关的特殊功能寄存器: TCON 和 TMOD,单片机定时/计数器的结构和原理,Timer的2个特殊功能寄存器(TCON,TMOD),TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0,定时器控制寄存器TCON (88H),TFx: Timer0/1计数溢出标志位。 =1 计数溢出; =0 计数未满 TFx标志位可用于申

5、请中断或供CPU查询。 在进入中断服务程序时会自动清零;但在 查询方式时必须软件清零。,TRx: Timer0/1运行控制位。 =1 启动计数; =0 停止计数,TR0/TR1:Timer0/1运行控制位: TR0/TR1 =0 时,Timer0/1停止计数 TR0/TR1 =1 时,Timer0/1启动计数,定时器T0/T1 中断申请过程, 在已经开放T0/T1中断允许且已被启动的前提下: T0/T1加满溢出时 TF0/TF1标志位自动置“1” 检测到TCON中TF0/TF1变“1”后,将产生指令: LCALL 000BH/LCALL 001BH 执行中断服务程序, TF0/TF1标志位会自

6、动清“0”,以备下次中断申请。,定时/计数器可按片内机器周期定时,也可对由T0/T1引脚输入一个负脉冲进行加法计数,TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0,TCON (88H),GATE C / T M1 M0 GATE C / T M1 M0,定时器方式寄存器TMOD (89H),T1,T0,M1,M0:工作方式定义位 ( 定义4 种方式 ):,C/T :计数器/定时器选择位 = 1 外部事件计数器。对Tx引脚的负脉冲计数; = 0 片内时钟定时器。对机器周期脉冲计数定时,0 0:13位 Timer用它无益,不要记它! 0 1:16位 Timer经常用到 1 0:可自

7、动重装的 8位 Timer经常用到 1 1:T0 分为2个8位 Timer;T1 此时不工作 因为没有带来甚麽好处,几乎无用,GATE C / T M1 M0 GATE C / T M1 M0,T1,T0,GATE门控位: Timer可由软件与硬件两者控制 GATE = 0 普通用法 Timer的启/停由软件对TRx位写“1”/“0”控制,定时器方式寄存器TMOD(续),(89H), GATE = 1 门控用法 Timer的启/停由软件对TRx位写“1”/“0” 和在INTx引脚上出现的信号的高/低共同控制,定时器结构与工作方式,工作方式1:16位的定时/计数器,振荡器,12,TLx THx

8、(8位) (8位),TFx,申请中断,Tx端,TRx位,GATE位,INTx端,1,&,C/T=0,C/T=1,控制 =1开关接通,或门,与门, THx/TLx赋初值:THx赋高8位,TLx赋低8位,工作方式1 的编程要点:, TMOD选方式: 写“M1,M0”=01 , 选方式1, 若不用门控位,直接用软件写TRx控制启/停 若使用门控位,先置位TRx,然后由INTx端 的高/低电平来控制其启/停, 若要允许中断,还须先置位ETx、EA等中断 允许控制位,并编写中断服务程序 若不用中断,可查询“计数溢出标志TFx” 的方式工作,但溢出标志TFx须软件清0,由于在方式1工作模式下,TLx、TH

9、x计数寄存器各使用8位,而28=256,我们要把计数起点的值除以256,将余数放入TLx计数寄存器,将商数放入THx计数寄存器。例如要使用Timer 0计数50000,则填入计数寄存器的指令如下: MOV TL0,#(65536-50000) MOD 256 ;取8位的余数 MOV TH0,#(65536-50000)256 ;取8位的商数,TL0=B0 H TH0=3C H,T0=65536-50000=3CB0 H,定时器(方式1)应用程序举例:,分析:已知fosc = 6MHz 则: (振荡周期)1Tc=1/6MHz (机器周期)1Tm=12Tc=12/6MHz=2S 粗略地说:Tmin

10、 2S 16位定时器最大数值为:216=65536=0FFFFH+1 故选择方式 1 工作可以得到: Tmax = 655362 = 131072S131.072mS,例:若晶振频率为6MHz,计算单片机的最小与最大定时时间:,分析:已知fosc = 6MHz 则: (机器周期)1Tm=12Tc=12/6MHz=2S 100mS2 S = 50000 16位定时器最大数值为: 216 = 65536 (=0FFFFH+1) 故选择方式1工作可以满足要求。 计算初值:6553650000=15536=3CB0H,例:要求对T0产生100mS定时进行初始化。 (晶振=6MHz),定时器(方式1)应

11、用程序举例:,GATE C / T M1 M0 GATE C / T M1 M0,定时器方式 寄存器TMOD,由分析得知:T0选择方式1,初值=3CB0H,X X X X 0 0 0 1,初始化:TMOD=0x01 ;选 T0 方式 1 TH0=0x3C ;赋初值高8位 TL0=0xB0 ;赋初值低8位 TR0=1 ;启动 T0定时 若需要定时器0产生中断还应当写如下语句: ET0=1 ;开T0中断允许 EA=1 ;开总中断允许 以及相应的中断服务程序。,工作方式2:8 位自动重装的定时/计数器,振荡器,12,TLx (8位),TFx,申请中断,Tx端,TRx位,GATE位,INTx端,1,&

12、,C/T=0,C/T=1,控制 =1开关接通,或门,与门,THx (8位),溢出位,门开, THx/TLx赋相同初值 在TLx计数达到0FFH 再加“1”时,TLx 将溢出,进位位直接进入“TFx”去申请 中断,同时打开三态门,使THx中的值 自动重装(Copy)进TLx,工作方式 2 的编程:, TMOD寄存器选方式: 写“M1,M0” = 10 , 选中方式2, 其他用法与各种方式1完全相同,分析:fosc = 6MHz 1机器周期 = 2 S 1KHz方波周期 = 1 mS 半个方波周期 =500S 500uS2 uS = 250 若选择方式2 工作,8位定时器最大数值为: 28 =25

13、6 =0FFH + 1 可以满足要求。 计算初值:256250=6,例1:从P1.0 脚输出频率=1KHz方波。 设:晶振=6MHz。利用T1定时中断。,Th:半周期,T:周期,定时器(方式2)应用程序举例:,#include sbit P1_0=P10; void main() TMOD=0x20; TH0=0x06; TL0=0x06; EA=1; ET1=1; TR1=1; while(1); void Timer1_2() interrupte 3 P1_0=! P1_0;,初始化,;选T1方式2 ;赋重装值 ;赋初值 ;开T1中断 ;开总中断 ;启动T1,T0: 组织成TL0和TH0

14、两个8位定时/计数器,Timer工作方式 3 几乎无用,T1: 不再是定时/计数器了 T1 的TR1和TF1出借给TH0当控制位使用, 剩下的TH1/TL1寄存器只能当作普通寄存 器用。,振荡器,12,TL0 (8位),TF0,申请中断,T0端,TR0位,GATE位,INT0端,1,&,C/T=0,C/T=1,控制 =1开关接通,或门,与门,TH0 (8位),TF1,申请中断,TR1位,控制 =1,Timer工作方式 3 结构:,T0成为双 8位Timer T1不再有Timer功能 TF1,TR1出借给TH0,定时器小结: (2个16位加法计数器),运行/停止由TRx位控制,(当GATE=1时

15、: 由TRx位和Tx引脚上的信号共同控制),工作方式由TMOD决定; 计数/定时由C/T位决定 工作方式0(13位) 永远不用 工作方式3(T0拆为双8位) 几乎无用 工作方式1(16位) 经常用到 工作方式2(8位自动重装) 经常用到,从初值按机器周期或外部脉冲递加,溢出位 TFx申请中断;中断允许由ETx位和EA位控制,当定时计数器设置为计数工作方式时,计数器对来自输入引脚TO(P3.4)和Tl(P3.5)的外部信号计数,外部脉冲的下降沿将触发计数。在每个机器周期的S5P2期间采样引脚输入电平,若前一个机器周期采样值为l,后一个机器周期采样值为O,则计数器加l。新的计数值是在检测到输入引脚电平发生l到0的负跳变后,于下一个机器周期的S3P1期间装入计数器中的,可见,检测一个由l到O的负跳变需要两个机器周期。,所以,最高检测频率为振荡频率的124。计数器对外部输入信号的占空比没

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

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

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