




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
定时器及应用 定时 计数器的基本结构如图所示 例1 设单片机晶振频率为6MHZ 使用定时器1以方式0产生周期为500us的等宽正方波连续脉冲 并由P1 0输出 以查询方式完成 解 1 计算计数初值要产生500us的等宽正方波脉冲 只需在P1 0端以250us为周期交替输出高低电平即可实现 为此定时时间为250us 使用6MHZ晶振 则一个机器周期为2us 方式0为13位计数结构 设初值为X 则 213 X 12 1 6 250得 X 8067 二进制数表示为 1111110000011 十六进制表示为 高8位为 0FCH 低5位为 03H 其中高8位装入TH1 即TH1 0FCH 低5位装入TL1 即TL1 03H 2 TMOD寄存器初始化为把定时器 计数器设定为方式0 则M1M0 00 为实现定时功能 应使C T 0 为实现定时器 计数器1的运行控制 则GATE 0 定时器 计数器T0不用 有关位设定为0 因此TMOD寄存器初始化为00H 3 由定时器控制器TCON中的TR1位控制定时的启动和停止 TR1 1启动 TR1 0停止 4 使用查询就禁止中断IE 00H 5 程序设计 MOVTMOD 00H 设置T1为工作方式0MOVTH1 0FCH 设置计数初值MOVTL1 03HMOVIE 00H 禁止中断SETBTR1 启动定时LOOP JBCTF1 LOOP1 查询计数溢出AJMPLOOPLOOP1 MOVTH1 0FCH 重新设置计数初值MOVTL1 03HCPLP1 0 输出取反AJMPLOOP 重复循环 例3 使用定时器0以工作方式2产生100us定时 在P1 0输出周期为200us的连续方波脉冲 已知晶振频率fosc 6MHZ 解 1 计算计数初值6MHZ晶振下 一个机器周期为2us 以TH0作重装载的预置寄存器 TL0作8位计数器 则 28 X 12 1 6 100 得X 206 11001110B 0CEH把0CEH分别装入TH0和TL0中 2 TMOD初始化为把定时器 计数器设定为方式2 则M1M0 10 为实现定时功能 应使C T 0 为实现定时器 计数器0的运行控制 则GATE 0 定时器 计数器T1不用 有关位设定为0 因此TMOD寄存器初始化为00000010 即 02H 3 由定时器控制器TCON中的TR0位控制定时的启动和停止 TR0 1启动 TR0 0停止 4 使用中断方式 应开中断EA位和ET0位置 1 5 程序设计 查询方式 MOVTMOD 02H 设置T0为工作方式2MOVTH0 0CEH 设置计数初值MOVTL0 0CEHMOVIE 00H 禁止中断SETBTR0 启动定时LOOP JBCTF0 LOOP1 查询计数溢出AJMPLOOPLOOP1 CPLP1 0 输出取反AJMPLOOP 重复循环 5 程序设计 中断方式 MOVTMOD 02H 设置T0为工作方式2MOVTH0 0CEH 设置计数初值MOVTL0 0CEHSETBEA 开中断SETBET0 定时器1允许中断LOOP SETBTR0 启动定时HERE SJMP 等待中断AJMPLOOP中断服务程序 CPLP1 0 输出取反RETI 中断返回 设某用户系统中已使用了两个外部中断源 并置定时器T1工作在模式2 作串行口波特率发生器用 现要求再增加一个外部中断源 并由P1 0输出一个5KHz的方波 Fosc 12MHz 分析 目的 1 增加一个外部中断 2 使P1 0输出一个方波 条件 1 两个外部中断源已被使用2 定时器T1已用于串行口波特率发生器因此 可利用定时 计数器T0 使之工作在模式3 1 利用TL0扩展外部中断源2 利用TH0作定时器使用 输出方波 设置初值 1 TL0 0FFH2 因为输出方波f 5kHz 故方波周期为200us 用TH0产生100us的定时 故TH0的初值X 256 定时时间 机器周期 256 100us 晶振频率 12 156设定T0工作方式 TMOD TCON 程序 MOVTMOD 27H T0 模式3 计数方式 T1 模式2 定时方式MOVTL0 0FFH 一旦加1 马上溢出 申请中断MOVTH0 156 TH0初值MOVTH1 data 根据波特率要求而定MOVTL1 dataMOVTCON 55H 01010101MOVIE 9FH 开放全部中断TL0INT MOVTL0 0FFH TL0重新赋值 RETITH0INT MOVTH0 156 TH0重新赋值CPLP1 0RETI 低频信号发生器驱动程序设计一个控制程序 使89c51的P1口输出8路低频方波脉冲 频率分别为100 50 25 20 10 5 2 1Hz 1 计算定时器初值使用T0 产生5ms的定时 若晶振选12MHz 则5ms相当于5000个机器周期 T0应工作在模式1 初值x为 x 65536 5000 60536 用十六进制表示 则x 0EC78H 注意TH TL分开赋值 因为T0 T1都是16位 2 设立8个计数器对应于P1 0 P1 7 设立8个计数器 初值分别为1 2 4 5 10 20 50 100 由T0的溢出中断服务程序对它们减 1 计数 当减为0时恢复初值 并使相应的口引脚改变状态 这样就可以使P1口输出所要求的方波 程序 ORG0START AJMPMAINORG0BHPTP0 MOVTL0 78H T0中断服务程序MOVTH0 0ECHCPLP1 0DJNZ31H PF01 对各路时间计数器进行减1计数MOV31H 2 计数器减为1 恢复计数初值CPLP1 1 输出取反PF01 DJNZ32H PF02MOV32H 4CPLP1 2PF02 DJNZ33H PF03MOV33H 5CPLP1 3 PF03 DJNZ34H PF04MOV34H 10CPLP1 4PF04 DJNZ35H PF05MOV35H 20CPLP1 5PF05 DJNZ36H PF06MOV36H 50CPLP1 6PF06 DJNZ37H PF07MOV37H 100CPLP1 7PF07 RETI MAIN MOVSP 70H 主程序栈指针初始化MOV31H 2 各路计数器置初值MOV32H 4MOV33H 5MOV34H 10MOV35H 20MOV36H 50MOV37H 100MOVTMOD 1 GATE 0 C T 0 M1M0 01MOVTL0 78H 初值 T0MOVTH0 0ECHMOVIE 82H 允许T0中断SETBTR0 允许T0计数HERE SJMPHERE 以踏步表示CPU可以处理其他工作 例利用定时器T1的模式2对外部信号计数 要求每计满100次对P1 0端取反 解 1 计算计数初值X100 28 XX 256 100 156 9CH 2 模式字TMOD 0110 B 60H 3 程序清单 用中断方式ORG0000HMAIN MOVTMOD 60HMOVTL1 156MOVTH1 156MOVIE 88HSETBTR1SJMP ORG001BHCPLP1 0RETI 例脉冲参数测量 GATE功能的使用 脉冲高电平 计数 长度值存于21H 20H中 脉冲低电平长度存于23H 22H中 电路连接如下图所示 解 复习GATE的用法 GATE 0时 TRi 1 即可启动Ti定时 计数GATE 1时 TRi 1 且 1 才启动定时 计数 ORG0000HLJMPMAINORG2000HMAIN MOVTMOD 99H T0 T1均工作在定时 模式1 GATE 1MOVA 00H T0 T1赋计数初值00H 定时最长时间为0000 65536MOVTL0 A MOVTH0 AMOVTL1 AMOVTH1 A TEST0 JBP3 2 TEST0 检测是否到a点SETBTR0 到a点 TR0 1 做好取计时值准备 TEST1 JNBP3 2 TEST1 检测是否到1点SETBTR1 到1点T0计时 TR1 1 做好T1计时准备 TEST2 JBP3 2 TEST2 检测是否到2点CLRTR0 到2点 停止T0计时 T1开始计时 MOV20H TH0 保存T0计时结果MOV21H TL0 TEST3 JBP3 3 TEST3 检测是否到3点CLRTR1 到3点 停止T1计数MOV22H TH1 保存T1计数结果MOV23H TL1LCALLDISPSJMP 运行中读定时器 计数器 80C51可以随时读写计数寄存器TLx和THx x为0或1 用于实时显示计数值等 办法是 先读THx 后读TLx 再重读THx 若两次读得的THx值是一样的 则可以确定读入的数据是正确的 若两次读得的THx值不一致 则必须重读 例 飞读 RDTIME MOVA TH0 读TH0MOVR0 TL0 读TL0并存入R0CJNEA TH0 RDTIME 再读TH0 与上次 读入的TH0比较 若不等 重读MOVR1 A 存TH0在R1中RET 实时时钟的设计 1 实时时钟实现的基本思想 如何获得1秒的定时 可把定时时间定为100ms 采用中断方式进行溢出次数的累计 计满10次 即得到秒计时 片内RAM中规定3个单元作为秒 分 时单元 具体安排如下 32H 秒 单元 31H 分 单元 30H 时 单元从秒到分 从分到时是通过软件累加并进行比较的方法来实现的 时钟就是以秒 分 时为单位进行计时 用定时器与中断的联合应用 假定使用定时器T0 以工作模式1进行100ms的定时 如fosc 6MHz 则计数初值X为 216 X 12 6 106 100 10 3s X 15536 3CB0H因此 TL0 0B0H TH0 3CH 采用定时方式进行溢出次数的累计 计满10次即得到秒计时 从秒到分和从分到时的计时是通过累计和数值比较实现的 时钟显示即及显示缓冲区部分在这里略 可自行设计 主程序 MAIN 的主要功能是进行定时器T1的初始化编程并启动T1 然后通过反复调用显示子程序 等待100ms定时中断的到来 其流程如图所示 2 程序流程及程序清单 设T1为模式1 设中断次数 清计时单元 开中断 启动T1 调用显示子程序 等待定时中断 中断服务程序 PITO 的主要功能进行计时操作 程序开始先判断计数溢出是否满了10次 不满表明还没达到最小计时单位 秒 中断返回 如满10次则表示已达到最小计时单位 秒 程序继续向下运行 进行计时操作 要求满1秒则 秒位 32H单元内容加1 满60s则 分位 31H单元内容加1 满60min则 时位 30H单元内容加1 满24h则30H 31H 332H单元内容全部清0 中断服务程序流程如下图所示 保护现场 赋计数初值 到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 秒单元清0 SETBET1 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 ACJNE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年寿光地理中考试卷及答案
- 2025年书法教师考试试题及答案
- 物业楼梯扶手施工方案
- 宁夏旅游投资集团有限公司招聘考试真题2024
- 2025年锦州市属事业单位考试试卷
- 怀邵铁路特大桥施工方案
- 单缸柴油机铁路施工方案
- 2025年邮政储业务试题及答案
- 安顺阳台阳光房施工方案
- 2025年上海国际新能源研究中心横向技术合同可行性评估
- 中药活血化瘀成分的分子靶向作用
- 数字金融驱动区域技术创新水平提升的空间溢出效应研究
- 一次性餐具配送投标方案
- 《公共艺术设计》课件
- 2024年中国教育出版传媒集团有限公司招聘笔试参考题库附带答案详解
- 老年综合评估课件
- 冬季作业安全技术交底
- 代写公司简介范本
- GB/T 25283-2023矿产资源综合勘查评价规范
- 译林版九年级英语上册Unit 4 Task 示范公开课教学课件
- 华北理工采矿学课件14采矿方法分类
评论
0/150
提交评论