第六章 定时器及应用.ppt_第1页
第六章 定时器及应用.ppt_第2页
第六章 定时器及应用.ppt_第3页
第六章 定时器及应用.ppt_第4页
第六章 定时器及应用.ppt_第5页
免费预览已结束,剩余44页可下载查看

下载本文档

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

文档简介

第六章定时器及应用 6 1定时器概述 6 2定时器的控制 6 3定时器的四种模式及应用 6 4思考题与习题 定时器概述 实现定时或计数 通常采用以下三种方法 1 硬件法硬件定时功能完全由硬件电路完成 不占用CPU时间 但当要求改变定时时间时 只能通过改变电路中的元件参数来实现 很不灵活2 软件法软件定时是执行一段循环程序来进行时间延时 优点是无需额外的硬件开销 时间比较准确 但牺牲了CPU的时间 3 可编程定时器 计数器8051内部提供了2个可编程的定时器 计数器T0 T1 它们可以用于定时或对外部脉冲计数 还可以作为串行口的波特率发生器 定时器达到预定定时时间或计数满时 给出溢出标志 还可以发出内部中断 定时器概述 组成 6个SFR寄存器 包括TMOD TCON TH0和TL0 TH1和TL1 定时 计数器的核心 一个加1计数器 完成加1计数功能 定时功能 若是对单片机内部的机器周期进行计数 从而得到定时时间 这就是定时功能 每个机器周期计数器加1计数功能 若是对单片机的T0 T1引脚输入信号进行计数 即计数功能 当外部输入信号出现下降沿时 计数器加1 定时功能和计数功能的设定和控制都是通过软件来设定的 8051定时 计数器逻辑结构 T0 T1的内部结构框图 定时器 计数器0 1的初始化编程 定时器的控制 工作模式寄存器TMOD GATE 1 T0 T1的启动由INTi引脚和TRi位共同控制 只有INTi引脚为高电平时 TRi置 1 才能启动定时 计数器 GATE 0 T0 T1由软件设置TRi来控制启动 TRi 1 启动 TRi 0 停止 定时器 计数器的工作方式 TMOD用于控制T0和T1的工作方式 低4位用于控制T0 高4位用于控制T1M1M0 工作方式控制位 对应的工作方式如下图 控制寄存器TCON TCON用于控制定时 计数器的启 停 溢出标志和外部中断信号触发方式 TFi T0 T1溢出位 当计数溢出时 由硬件自动使TFi置1 并向CPU申请中断 中断响应后硬件自动清0 TFi也可作为程序查询的标志位 在查询方式下由软件清0 TRi T0 T1运行控制位 TRi 1 启动计数 TRi 0 停止计数 定时器的4种模式及应用 每种工作模式对应的最大计数值模式0 13位计数器213 8192模式1 16位计数器216 65536模式2 8位计数器28 256模式3 8位计数器28 256定时初值 对机器周期进行计数 T 定时时间 X 初值 N 计数器位数 fosc 系统时钟频率 2N X 12 fosc TX 2N fosc 12 T计数初值 对外部脉冲计数 计数值根据要求确定 N 计数器位数 X 初值 则 X 2N 计数值 定时器 计数器工作模式0 模式0为13位计数器定时时间T T 213 X 12 fosc 213 X 机器周期计数初值 X 213 计数值 工作模式0举例 例 应用定时器T0产生1ms定时 并使P1 0输出周期为2ms的方波 已知晶振频率为6MHz初值X 213 X 12 6 106 1 10 3X 7692 1E0CH 二进制表示为X 0001111000001100TH0 0F0H 高8位 TL0 0CH 低5位 采用查询TF0状态方式 ORG2000HMOVTMOD 00H 写入方式控制字MOVTL0 0CH 计数初值写入MOVTH0 0F0HSETBTR0 启动T0LOOP JBCTF0 PE TF0 1溢出转移PE 清TF0AJMPLOOP 未溢出PE MOVTL0 0C0H 重装计数初值MOVTH0 0F0HCPLP1 0AJMPLOOPEND 采用定时器溢出中断方式的程序ORG0000H 主程序RESET AJMPMAIN 跳过中断服务程序区ORG000BH 定时器T0中断矢量AJMPPE 转入中断服务程序ORG0030HMAIN MOVTMOD 00H 设置T0为模式0MOVTL0 0CH 计数初值写入MOVTH0 0F0HSETBEA CPU开中断SETBET0 T0中断允许SETBTR0 启动定时HERE SJMPHERE 等待中断ORG0120H 中断服务程序PE MOVTL0 0C0H 重装计数初值MOVTH0 0F0HCPLP1 0 P1 0取反RETI 中断返回 定时 计数器工作模式1 模式1是16位定时 计数器 与模式0的区别是计数器的长度 比模式0常用 定时时间T T 216 X 12 fosc 216 X 机器周期计数初值 X 216 计数值 模式1举例 例 用定时器T1产生一个50Hz的方波 由P1 1输出 采用查询的方式进行控制 设晶体频率为12MHz 确定计数初值方波周期T 20ms 用T1定时10ms P1 1取反输出 计数初值X T 216 X 12 fosc 10 10 3 设置工作模式寄存器TMODTMOD 00010000B 10H 启动定时计数器 模式1举例 ORG2000HMOVTMOD 10HSETBTR1LOOP MOVTH1 0D8HMOVTL1 0F0HJNBTF1 CLRTF1CPLP1 1SJMPLOOPEND 定时 计数器工作模式2 模式2是能自动重装计数初值的8位计数器 低8位作计数器使用 高8位保存计数初值定时方式计数初值 X 28 T fosc 12计数方式计数初值 X 28 计数值 工作模式2举例 例1 利用定时器T1的模式2对外部信号计数 要求每计满100次 将P1 0端取反 思路 外部信号由T1 P3 5 引脚输入 每发生一次负跳变计数器加1 每输入100个脉冲 计数器发生溢出中断 中断服务程序将P1 0取反一次T1的计数初值 X 28 100 156 9CH 因此 TH1 TL1 9CHTMOD 01100000B 60H 工作模式2举例 程序清单 ORG0000HLJMPMAINORG001BH 中断服务程序入口CPLP1 0RETIMAIN MOVTMOD 60H 设置T1为模式2 外部计数方式MOVTL1 9CH T1计数器初值MOVTH1 9CHMOVIE 88H 定时器开中断SETBTR1 启动T1计数HERE SJMPHERE 等待中断 工作模式2举例 例2 由P3 4引脚 T0 输入一低频脉冲信号 要求P3 4每发生一次负跳变时 P1 0输出一个200us的同步负脉冲 同时P1 1输出一个400us的同步正脉冲 已知晶振频率为6MHz 初态为P1 0为高 P1 1为低 思路 T0工作于模式2 外部事件计数方式 初值为FFH 一次计数就产生中断 查询TF0 为1后改为200us定时 设置P1 0和P1 1状态 第一次200us定时完成 设置P1 0和P1 1状态 继续第二次200us定时 第二次定时完成 设置P1 0和P1 1状态 恢复初值FFH 循环 即 反复改变计数值 程序清单 START MOVTMOD 06H T0模式2 计数MOVTH0 0FFH 计数初值MOVTL0 0FFHCLRP1 1 P1 1初态为0SETBTR0LOOP JBCTF0 LP1 检测外部信号负跳变SJMPLOOP LP1 CLRTR0 关定时器MOVTMOD 02H T0改变为定时200us 模式2MOVTH0 156 定时的计数初值MOVTL0 156SETBP1 1 P1 1输出1CLRP1 0 P1 0输出0SETBTR0 启动定时 LOOP1 JBCTF0 LP2 第1个200us到否SJMPLOOP1 未到等待LP2 SETBP1 0 到了恢复P1 0LOOP2 JBCTF0 LP3 第2个200us到否SJMPLOOP2LP3 CLRP1 1CLRTR0 关定时器AJMPSTART 定时 计数器工作模式3 模式3下 T0和T1的结构 功能不同T0模式3 TL0和TH0分成两个互相独立的8位计数器 其中TL0用原T0的各控制位 引脚和中断源 即GATE0 TR0 TF0和T0引脚 INT0引脚TH0只有内部定时 占用定时器T1的TR1和TF1T1无模式3 将T1设置为方式3 会使T1立即停止计数 定时 计数器工作模式3 在T0模式3时 T1仍可设置为方式0 2 由于TR1和TF1被T0的TH0占用 计数器开关K已被接通 此时仅用T1的C T控制T1运行 计数器溢出时 只能将输出送入串行口或用于不需要中断的场合 在一般情况下 当T1用作串行口波特率发生器时 T0才设置为工作模式3 此时 常把定时器T1设置为模式2 用作波特率发生器 T0模式3结构图 T0模式3下 T1结构 工作模式3举例 例 应用T0模式3 分别设定200us和400us定时 并使P1 0和P1 1分别产生周期为400us和800us方波 已知晶振频率为6MHz 采用中断方式 200us计数初值 28 X 2 10 6 200 10 6 X 156 9CH400us计数初值 28 X 2 10 6 400 10 6 X 56 38H ORG2000HSTART AJMPMAINORG000BHAJMPPIT0 转入T0中断处理入口ORG001BHAJMPPIT1 转入T1中断处理入口ORG2100HMAIN MOVSP 60HMOVTMOD 03H 模式3MOVTL0 9CH 定时200us初值MOVTH0 38H 定时400us初值MOVTCON 50H 启动TL0 TH0计数MOVIE 8AH 开T0 T1中断 LOOP AJMPLOOP 等待中断PIP0 MOVTL0 9CH T0中断处理程序CPLP1 0RETIPIT1 MOVTH0 38H T1中断处理程序CPLP1 1RETI 利用GATE测试外部输入脉冲宽度 GATE 0时 定时器的启动只受TRi位控制GATE 1时 定时器的启动受TRi位和外部中断信号INTi的共同控制 只有当INTi引脚为1 同时TRi 1时才能启动计数 INTi引脚为0时停止计数 换个角度看 当GATE 1时 定时器实际记录的时间就是相应INTi引脚上高电平的持续时间 通过反相器 则可测得相应引脚的低电平的持续时间 两个时间之和即为该引脚上输入波形的周期 其倒数为输入波形的频率 还可算出占空比等参数 利用GATE测试外部输入脉冲宽度 测试原理 以T0为例 GATE 1 TR0 1 测试脉宽举例 例 利用T0门控位GATE来测试由INT0 P3 2 引脚输入的正脉冲宽度 已知晶振为12MHz 所测得的高8位值存入片内RAM的21H单元 低8位值存入片内20H单元中 思路 采用T0工作模式1 16位计数 GATE 1 TR0 1 初值为0000H 测试脉宽举例 MOVTMOD 09H T0定时 模式1MOVTH0 00H T0计数初值0000HMOVTL0 00HMOVR0 20H RAM的地址指针LOOP1 JBP3 2 LOOP1 等待INT0变低SETBTR0 启动T0准备计数LOOP2 JNBP3 2 LOOP2 等待INT0变高LOOP3 JBP3 2 LOOP3 等待INT0再次变低CLRTR0 INT0变低停止计数MOV R0 TL0 存入计数值INCR0MOV R0 TH0 综合应用举例 例1 设时钟频率为6MHz 编写利用T0产生1s定时的程序 确定定时器T0的工作模式模式0最长可定时16 384ms 模式1最长可定时131 072ms 模式2最长可定时512us 定时1s 可选用模式1 每隔100ms中断一次 中断10次从而达到1s的定时 求计数器初值X 216 X 12 6 106 100 10 3sX 15536 3CB0H 实现方法 对于中断10次计数 可使T0工作在计数方式 也可用循环程序的方法实现 本例采用循环程序法 源程序清单ORG0000HAJMPMAIN 上电 转向主程序ORG000BH T0的中断服务程序入口地址AJMPSERVE 转向中断服务程序ORG0080H 主程序MAIN MOVSP 60H 设堆栈指针MOVB 0AH 设循环次数MOVTMOD 01H 设置T0工作于模式1MOVTL0 0B0H 装计数值低8位MOVTH0 3CH 装计数值高8位SETBTR0 启动定时SETBET0 T0开中断SETBEA CPU开中断SJMP 等待中断SERVE MOVTL0 0B0H 重新赋初值MOVTH0 3CHDJNZB LOOP B 1不为0 继续定时CLRTR0 1s定时到 停止T0工作LOOP RETI 中断返回END 综合应用举例 例2 设计实时时钟程序 计算计数初值 时钟计时的最小单位是秒 而单片机的最长定时时间只能达到131ms 时钟频率为6MHz 可把定时器的定时时间定为100ms 计数溢出10次即得到1秒 如fosc 6MHz 使用定时器T1 以工作模式1进行100ms的定时 则计数初值X为 X 15536 3CB0H 采用中断方式进行溢出次数的累计 计满10次即得到秒计时 从秒到分和从分到时的计时可通过累计和数值比较实现 满1s 秒位累加 满60s 分位累加 满60min 时位累加 满24h全部累加单元清0 设T1为模式1 设中断次数 清计时单元 开中断 启动T1 调用显示子程序 保护现场 赋计数初值 到1s 32H 加1 32H 60 32H 清0 31H 加1 31H 60 31H 清0 30H 加1 30H 24 30H 清0 恢复现场 返回 a a N N N N Y Y Y Y 主程序流程图 中断服务程序流程图 ORG0000HAJMPMAIN 上电 转向主程序ORG001BH T1的中断服务程序入口地址AJMPSERVE 转向中断服务程序ORG2000H 主程序MAIN MOVSP 60H 设堆栈指针MOVTMOD 10H 设置T1工作于模式1MOV20H 0AH 设循环次数CLRAMOV30H A 时单元清0MOV31H A 分单元清0MOV32H A 秒单元清0SETBET1 T1开中断SETBEA CPU开中断MOVTL1 0B0H 装计数值低8位MOVTH1 3CH 装计数值高8位SETBTR1 启动定时SJMP 等待中断 中断服务程序 SERVE PUSHPSW 保护现场PUSHACCMOVTL1 0B0H 重新赋初值MOVTH1 3CHDJNZ20H RETUNT 1s未到 返回MOV20H 0AH 重置中断次数MOVA 01HADDA 32H 秒位 加1DAA 转换为BCD码MOV32H ACJNEA 60H RETUNT 未满60s 返回MOV32H 00H 计满60s 秒位 清0MOVA 01HADDA 31H 分位 加1DAA 转换为BCD码MOV31H ACJNEA 60H RETUNT 未满60min 返回MOV31H 00H 计满60min 分位 清0 MOVA 01HADDA 30H 时位 加1DAA 转换为BCD码MOV30H ACJNEA 24H RETUNT 未满24h 返回MOV30H 00H 计满24h 时位 清0RETUNT POPACC 恢复现场POPPSWRETI 中断返回END 运行中读定时 计数器 8051可以随时读写TLi和THi 比如用于实时

温馨提示

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

评论

0/150

提交评论