单片机原理及应用 蔡启仲 第5章 定时器计数器_第1页
单片机原理及应用 蔡启仲 第5章 定时器计数器_第2页
单片机原理及应用 蔡启仲 第5章 定时器计数器_第3页
单片机原理及应用 蔡启仲 第5章 定时器计数器_第4页
单片机原理及应用 蔡启仲 第5章 定时器计数器_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1 第5章定时器 计数器 2 2 第5章目录5 1定时 计数器的结构5 1 1定时器 计数器的核心原型5 1 2定时器 计数器的组成5 1 3定时器 计数器的工作方式寄存器TMOD5 1 4控制寄存器TCON5 2定时器 计数器的工作方式5 2 1方式15 2 2方式25 2 3方式35 2 4方式05 3定时器 计数器的应用5 3 1方式1的应用举例5 3 2方式2的应用举例5 3 3方式3的应用举例5 3 4外部输入的计数脉冲信号的要求习题 3 3 5 1定时器 计数器的结构 微处理器应用系统中 经常完成如下工作 1 特定事件的定时控制2 脉冲个数的统计因此 定时功能和计数功能就是处理器必须具备的一项基本配备 51单片机内部就具备定时器和计数器 以满足功能需要 定时器 计数器的核心部件就是计数器 参考数字电子技术中的时序逻辑电路 额外附件了其他控制单元电路 4 5 1 1定时器 计数器的核心原型 定时器 计数器的主要功能部件的核心原型就是 1计数器 图5 13位异步 1计数器的组成 5 图5 23位异步 1计数器的时序图 在计数脉冲CP的作用下 JK触发器输出端Q0 Q1 Q2的状态变换由000 001 010 011 100 101 110 111 000时 总共需要8个计数脉冲 6 定时功能 设5秒定时 1 设置Q0 Q1 Q2的初始状态为 011 定时初值 2 CP脉冲 频率为1Hz 作用下 Q0 Q1 Q2状态变换历经011 100 101 110 111 000 3 5个时钟脉冲周期之后 即时间恰好为5秒 此时计数状态由111 000 溢出 计数功能 需3次计数 1 设置Q0 Q1 Q2的初始状态为 101 定时初值 2 外部待计数的触发脉冲 频率未知 作用下 Q0 Q1 Q2状态变换历经101 110 111 000 3 3个计数触发脉冲之后 即计数次数恰好为3 此时计数状态由111 000 溢出 7 5 1 2定时器 计数器的组成 51单片机内部一般有2 3个可编程定时器 计数器 其结构基本相同 常规系列80C51单片机内部设有2个16位可编程定时器 计数器 分别是T0和T1 图5 3定时器 计数器结构框图 8 特点 1 独立性 定时器 计数器和内部CPU相互独立 互不影响 即计数过程与单片机执行程序并行进行 2 51单片机内部有T0 T1两个定时器 计数器 3 两个定时器 计数器结构相同 4 每个定时器 计数器均具备独立的 1计数器THx和TLx x取0或1 5 两个定时器 计数器共同受TMOD 工作方式寄存器 和TCON 控制寄存器 相应位的控制其工作 9 1 GATE 门控位 2 工作模式选择位 3 M1和M0 工作方式选择位 5 1 3工作方式寄存器TMOD 特殊功能寄存器TMOD用于设置定时器 计数器T0和T1工作方式 字节地址为89H 不能位寻址 图5 4TMOD的位定义 10 GATE 门控位GATE 0 定时器 计数器的运行启动控制与外部引脚无关 仅由TRx x取0或1 位通过置1实现 GATE 1 定时器 计数器的运行启动控制与外部引脚有关 即由TRx x取0或1 位和外部引脚 x取0或1 的电平情况共同作用 当 TRx 1 启动Tx Cx工作 TMOD工作方式寄存器 11 工作模式选择位 0 定时器 计数器的工作模式为定时器 固定的定时时钟脉冲来自于12分频的单片机时钟脉冲 1 定时器 计数器的工作模式为计数器 计数脉冲来自于P3 4 T0 P3 5 T1 引脚输入的计数脉冲 12 M1和M0 工作方式选择位 13 1 TFx 溢出标志位 2 TRx 运行控制位 3 IEx 外部中断请求标志位 与定时器 计数器无关 4 ITx 外部中断触发模式选择位 与定时器 计数器无关 5 1 4控制寄存器TCON 控制寄存器TCON用来完成启动控制 溢出判断 中断标志等功能配置 字节地址为88H 位寻址8FH 88H 图5 5TCON的位定义 14 TFx 溢出标志位TFx 0 计数值无溢出 TFx 1 计数值有溢出 当 1计数器的计数值达到最大值时 在下一个输入脉冲作用下产生溢出 由硬件完成TFx的置1操作 并同时申请中断 控制寄存器TCON 15 TRx 运行控制位TRx 0 停止定时器 计数器Tx工作 绝对控制 计数器此时停止工作 TRx 1 启动定时器 计数器Tx工作 相对控制 是否计数开始还需要考虑GATE位的配置 16 5 2定时器 计数器的工作方式 通过对定时器 计数器的工作方式寄存器TMOD的配置 编程M1位和M0位 可以实现定时器 计数器的工作方式选择 51单片机的定时器 计数器具备4种工作方式 分别是方式0 方式1 方式2 方式3 现以T0为例来说明定时器 计数器的各个工作方式 17 5 2 1方式1 方式1为16位定时器 计数器工作方式 其16位计数器由TH0和TL0共同组成 其中TH0为高8位 TL0为低8位 图5 6方式1基本电路结构框图 18 工作模式选择定时 计数 计数脉冲来源 启动 停止控制电路 启动 与门输出为1 停止 与门输出为0 启动 停止模拟开关 闭合 控制端为1 打开 控制端为0 16位计数器模块 TH0 高8位 TL0 低8位 中断标志 溢出 TF0 1 正常 TF0 0 19 启动 停止控制电路 计数器模块 模拟开关 溢出中断 工作模式选择定时 计数 计数脉冲来源 0时 开关S1拨至上侧 定时模式 16位 1计数器的计数脉冲信号来自于51单片机时钟振荡器的时钟脉冲的12分频 1时 开关S1拨至下侧 计数模式 外部计数触发脉冲来自于单片机的引脚T0 P3 4 20 计数触发脉冲 启动 停止控制电路 计数器模块 溢出中断 模拟开关 闭合 控制端为1 打开 控制端为0 模拟开关当控制端电平信号为1 高电平 时 模拟开关闭合 通道导通 触发脉冲加载到计数器模块 当控制端电平信号为0 低电平 时 模拟开关打开 通道断开 触发脉冲无法加载到计数器模块 21 计数触发脉冲 计数器模块 模拟开关 溢出中断 启动 停止控制电路 启动 与门输出为1 停止 与门输出为0 TR0 0 与门输出锁定为0 低电平 模拟开关打开 停止计数 T0停止工作 TR0 1 与门输出需考虑另一端电平 即或门输出 GATE 0 非门控状态 或门输出锁定为1 高电平 此时T0启 停只受TR0控制 GATE 1 门控状态 或门输出受外部引脚P3 2 INT0 控制 仅有P3 2引脚为高电平时 或门输出为1 结合TR0 共同控制T0的启 停 22 计数触发脉冲 启动 停止控制电路 模拟开关 溢出中断 16位计数器模块 TH0 高8位 TL0 低8位 计数器模块 16位计数器 例如指定计数初值为5000H 则计数器变化5000H 5001H 5002H FFFEH FFFFH 0000H在计数触发脉冲作用下 从指定的计数初值开始 1操作 每一个脉冲 进行一次 1操作 当计数值由FFFFH 0000H变化时 产生溢出 置位溢出标志位 其中 高8位存放在TH0中 低8位存放在TL0中 组合生成16位计数值 23 计数触发脉冲 启动 停止控制电路 计数器模块 中断标志 溢出 TF0 1 正常 TF0 0 计数器模块 计数触发脉冲 计数器模块 启动 停止控制电路 计数触发脉冲 计数器模块 模拟开关 中断标志模块 当16位计数器计数值由FFFFH 0000H跳变时 硬件置位TF0 标明定时器 计数器T0已经发生溢出 供处理器中断查询 24 5 2 2方式2 方式2为自动装载初值的8位定时器 计数器工作方式 其8位计数器由TL0组成 而TH0作为自动重载初值备用寄存器 当溢出发生后 由硬件完成计数初值的重新赋值 图5 7方式2基本电路结构框图 与方式1的区别 25 5 2 3方式3 方式3 只能用于设置定时器 计数器T0 工作方式3的引入 目的在于通过该方式的设置 实现增加一个8位定时器的目的 T0工作于方式3时 T0被设置为两个8位定时器 计数器 一个占用T0的资源 另一个在硬件上占用了T1的TR1和TF1 导致T0工作于方式3时 T1不能够使用TR1和TF1 使得T1的功能弱化 26 方式3结构框图 图5 8T0方式3基本电路结构框图 定时器 计数器功能 只有定时器功能 与 27 T0工作于方式3时T1的工作状态 图5 9T1工作于方式1基本电路结构框图 图5 10T1工作于方式2基本电路结构框图 或 28 5 2 4方式0 方式0为13位定时器 计数器工作方式 其13位计数器由TH0和TL0的低5位共同组成 方式0基本电路结构框图 29 5 3定时器 计数器的应用 定时器 计数器是所有的微处理器不可或缺的组成部件 应用广泛 其应用方面 定时和计数 其编程方法 查询法和中断法 其编程过程 1 计算初值 2 定时器 计数器的初始化编程 3 定时器 计数器所要完成功能的程序设计 30 计算初值X 计算初始计数开始的值 即从哪个值开始进行 1操作 直至计数溢出或被停止 初值 计数的最大值 确定的定时时间t所需要的计数个数或计数的最大值 确定的计数值M所需要的计数个数 计数功能 定时功能 31 5 3 1方式1的应用举例 例5 1某51单片机应用系统 系统晶振的时钟频率采用12MHz 在P1 0引脚输出一个周期为10ms的方波信号 如图5 11所示 图5 11 1 计算定时初值X 时钟频率fOSC 12MHz 12分频后为1MHz 周期为1 s 定时时间5ms 2 初始化定时器T1 查询方法编程 初始化TL1 TH1 TMOD TCON 32 ORG0000HLJMPMAINORG0030HMAIN MOVSP 60H 开辟堆栈空间 栈底的地址设置为60HMOVTMOD 10H 设置T1为工作方式1 非门控的定时器模式MOVTCON 00H 设置T1相关标志位 TR1 0 TF1 0MOVTL0 78H 设置定时初值低8位MOVTH0 0ECH 设置定时初值高8位SETBTR1 启动T1开始定时LOOP JBCTF1 TIME1 判断T1是否溢出 若TF1 0 顺序执行 如果TF1 1 清TF1 转移到TIME1执行SJMPLOOP TF1 0 返回LOOP再继续查询TIME1 LCALLCPLP10 TF1溢出位有效 调用定时处理子程序CPLP10SJMPLOOP 实现产生方波脉冲的循环输出ORG0090H 定时处理子程序入口地址CPLP10 MOVTL1 78H 重新设置定时初值低8位MOVTH1 0ECH 重新设置定时初值高8位CPLP1 0 取反P1 0 输出10ms方波RET 子程序返回END 汇编源文件编译结束 3 完成功能程序设计 查询TF1是否为1 判断是否溢出 定时时间到 完成P1 0引脚的取反操作 初始化 查询溢出标志位 调用 子程序 33 方式1的应用举例 例5 2某51单片机应用系统 系统晶振的时钟频率采用12MHz 通过定时器T0产生1s的定时 驱动P1 0引脚电平取反操作程序 时钟频率为12MHz时 各工作方式最长定时时间如下 方式0 最长定时时间 8 192ms方式1 最长定时时间 65 536ms方式2 最长定时时间 0 256ms方式3 最长定时时间 0 256ms 根据题目要求 需要定时1秒 即便选择方式1 也无法直接实现1秒定时需要 此时可采用 硬件 定时器 定时 软件计数 的方法达到目标要求 设定定时时间为50ms 通过程序设置循环变量计数20次 可得到20 50ms 1000ms 1s的定时时间 34 1 50ms定时初值X 2 初始化定时器T0 初始化程序主要完成对TL0 TH0 TMOD TCON的设置 以及循环变量计数值的初始化设置 设循环变量R0存放计数值 则初始化其值为 R0 20 设定定时时间为50ms 35 3 完成功能程序设计 ORG0000HLJMPMAINORG0030HMAIN MOVSP 60HMOVTMOD 01HMOVTCON 00HMOVTL0 0B0HMOVTH0 3CHMOVR0 20SETBTR0LOOP JBCTF0 TIME0SJMPLOOPTIME0 LCALLMS50SJMPLOOPORG0090HMS50 DJNZR0 NEXTCPLP1 0MOVR0 14HNEXT MOVTL0 0B0H位MOVTH0 3CHRETEND 36 5 3 2方式2的应用举例 例5 3编写应用T0实现对T0 P3 4 引脚的方波脉冲个数检测程序 每检测到100个脉冲 驱动P1 0引脚电平取反 如图5 12 图5 12方波脉冲 1 计算定时初值X 2 初始化定时器T1查询方法编程 初始化TL1 TH1 TMOD TCON 37 3 完成功能程序设计 ORG0000HLJMPMAIN 跳转到主程序ORG0030HMAIN MOVSP 60H 开辟堆栈空间MOVTMOD 06H 初始化T0为工作方式2 计数器模式MOVTCON 00H 初始化T0相关标志位MOVTL0 9CH 初始化8位计数初值MOVTH0 9CH 初始化TH0 必须满足 TH0 TL0 SETBTR0 启动T0工作LOOP JBCTF0 CNT100 判断T0是否溢出 若TF0 0 顺序执行 如果TF0 1 清TF0 转移到CNT100执行 当TF0由0 1时 单片机自动将 TH0 TL0SJMPLOOP 反复查询CNT100 LCALLCPLP10 TF0溢出位有效 调用计数处理子程序SJMPLOOP 实现产生方波脉冲的循环输出ORG0090H 计数处理子程序入口地址CPLP10 CPLP1 0 已计数100个脉冲 取反P1 0RET 子程序返回END 汇编源文件编译结束 38 5 3 3方式3的应用举例 例5 4某51单片机应用系统 要求P1 0引脚以200 s的周期输出方波 P1 1引脚以482 s的周期输出方波 且同时以T1作为串行通信的波特率发生器 系统晶振采用12MHz 波特率为9600bps 分析 根据题目要求 至少需要三个硬件定时器 计数器完成该项工作 而51单片机内部仅仅具备两个硬件定时器 计数器 T0工作于方式3恰好可以解决此问题 应用T0实现两个硬件的8位定时器 参见图5 8 将T1设置为方式2 参见图5 10 构建三个硬件定时器 满足本题目的要求 1 计算定时初值X 2 初始化定时器T1 查询方法编程 初始化T0 T1相关寄存器的初始化 TL0作为8位定时器 TH0作为8位定时器 T2为工作于方式2的定时器 波特率Xbps计算公示为 39 3 完成功能程序设计 ORG0000HLJMPMAINORG0050HMAIN MOVSP 60HMOVTMOD 23H 初始化T0定时 方式3 T1定时 方式2MOVTCON 00H 初始化T0 T1相关标志位MOVTL0 9CH 设置TL0的定时初值X t 100 sMOVTH0 0FH 设置TH0的定时初值X t 241 sMOVTL1 0FDH 设置波特率发生器的定时初值XbpsMOVTH1 0FDH 设置TH1的初值 TH1 TH0 FDHSETBTR0 启动T0的TL0定时SETBTR1 启动T0的TH0定时LOOP JBCTF0 TIME100 判断100 s定时计数是否溢出 溢出转移JBCTF1 TIME241 判断241 s定时计数是否溢出 溢出转移SJMPLOOP 反复查询TIME100 MOVTL0 9CH 100 s定时处理程序 重新装载定时参数初值CPLP1 0 每个100 s取反一次P1 0SJMPLOOP 实现周期为200 s的方波脉冲的循环输出TIME241 MOVTH0 0FH 241 s定时处理程序 重新装载定时初值CPLP1 1 每个241 s取反一次P1 1SJMPLOOP 实现周期为482 s方波脉冲的循环输出END 汇编源文件编译结束 40 例5 5测量外部信号电平宽度 利用定时器T0测量 P3 2 引脚外部输入周期性方波信号的高电平THx持续时间 振荡频率fOSC 12MHz 图5 13 根据题目要求 待测方波如图5 13所示 由于不对低电平测量 可以应用T0门控GATE方式进行测量 设置T0为定时器模式 工作于方式1 定时初值 TH0 TL0 00H 过程分析 1 GATE 1 输入为低电平时 设置TR0 1 T0停止定时 2 GATE 1 TR0 1 输入由0 1的上升沿跳变时 T0开始定时 TH0和TL0组成的16位 1计数器从0000H开始 1计数 3 当 P3 2 引脚输入由高电平 低电平时 即高电平THx的下降沿 T0停止定时 读出并存放TH0和TL0中的定时计数值 该值 T就是高电平THx的持续时间 41 3 完成功能程序设计 CNT HEQU45HCNT LEQU44HORG0000H 程序开始LJMPMAIN 跳转到主程序ORG0050H 主程序入口地址MAIN MOVSP 60H 开辟堆栈空间MOVTMOD 09H 设置T0门控方式 工作于定时方式1 GATE 1CLRAMOVTCON A 初始化T0相关标志位MOVTL0 A 初始化定时低8位初值 TL0 00HMOVTH0 A 初始化定时高8位初值 TH0 00HSETBP3 2 设置P3 2引脚为高电平 为正确读取输入状态作好准备JBP3 2 P3 2 0 顺序执行 P3 2 1 等待待测方波低电平的出现SETBTR0 为启动T0定时计数做好准备LOOP SETBP3 2 P3 2输入为0 设置P3 2 1 为正确读取输入状态作好准备JNBP3 2 LOOP P3 2 0转移 P3 2 1顺序执行 并启动T0定时计数JBP3 2 等P3 2上待测方波低电平的出现 P3 2 0 顺序执行CLRTR0 测量完成 清零TR0 T0停止定时计数MOVCNT H TH0 存放定时计数结果的高8位时间数据MOVCNT L TL0 存放定时计数结果的低8位时间数据SJM

温馨提示

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

评论

0/150

提交评论