




已阅读5页,还剩80页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理与接口技术 时间就是生命 第6章定时器 计数器 第6章定时器 计数器 6 1定时器 计数器的计数与定时6 2定时器 计数器的控制6 3定时器 计数器的编程6 4定时器 计数器的工作方式6 5定时器 计数器的综合应用举例 第6章定时器 计数器 定时器 计数器与CPU并行工作 实现定时 计数功能 并以定时 计数的结果对单片机系统进行控制 本章主要介绍MCS 51系列单片机定时器 计数器的控制方法 工作方式 简单应用 6 1定时器 计数器的计数与定时 MCS 51系列单片机定时器 计数器的功能是用以实现定时 计数 并以定时 计数的结果进行控制 8051内部有两个16位可编程的定时器 计数器T0和T1 T0 T1 由两个8位寄存器TH0 TH1 和TL0 TL1 拼装而成 其中TH0 TH1 为高8位 TL1 TH1 为低8位 T0和T1有定时和计数两种工作模式 图6 1是MCS 51系列单片机定时器 计数器的内部结构图 6 1定时器 计数器的计数与定时 6 1 1计数 计数就是对来自单片机外部的事件进行计数 为了与请求中断的外部事件区分开 称此种外部事件为外部计数事件 外部计数事件由脉冲引入 单片机的P3 4 T0 和P3 5 T1 即为外部计数脉冲的输入端 所谓计数 就是对有效计数脉冲的计数 注意 51系列单片机的两个定时器 计数器采用加法计数结构 单片机在每个机器周期对P3 4 T0 和P3 5 T1 进行采样 若在一个机器周期采样到高电平 在下一个机器周期采样到低电平 即得到一个有效的计数脉冲 计数寄存器在下一个机器周期自动加1 6 1 2定时 MCS 51系列单片机中的计数器除了可以作为计数之用外 还可以用作时钟完成定时功能 定时就是对来自单片机内部的计数脉冲进行计数 注意 在定时模式下 51系列单片机的计数源是晶振的12分频产生的脉冲 思考 定时模式下 晶振频率为12MHz时 计数脉冲的时间间隔为多少 6 2 1定时方式寄存器TMOD 定时方式寄存器TMOD是单片机专门用来控制两个定时器 计数器的工作方式的寄存器 这个寄存器的各位定义如下 6 2 1定时方式寄存器TMOD 下面介绍与定时器 计数器T0相关的TMOD的低4位 GATE 门控位 由图6 2可以看出 GATE 0时 由TR0来启动定时 计数 GATE 1时 由TR0和 P3 2 共同启动定时 计数 只有当二者同时为1时才进行计数操作 定时 计数模式选择位 0时 处于定时模式 内部计数脉冲是对晶振进行12分频产生的 1时 处于计数模式 外部计数脉冲由T0 P3 4 引入 6 2 1定时方式寄存器TMOD M1 M0 工作方式选择位 M1 M0与定时器 计数器T0的四种工作方式有下面的对应关系 00 工作方式001 工作方式110 工作方式211 工作方式3 6 2 1定时方式寄存器TMOD TMOD对定时器 计数器T1的控制与对T0的控制类似 此时 门控位GATE所控制的定时 计数启动由TR1和 P3 3 共同参与完成 TMOD对定时器 计数器的控制由软件进行设定 大大提高了控制的灵活性 6 2 2定时控制寄存器TCON 定时控制寄存器TCON既参与中断控制又参与定时控制 此处只对与定时控制功能有关的控制位进行回顾 6 2 2定时控制寄存器TCON TCON的高四位进行定时 计数控制TF0 TCON 5 定时器 计数器T0的溢出中断标志位 当T0定时 或计数 结束时 由硬件自动置1 TF1 TCON 7 定时器 计数器T1的溢出中断标志位 当T1定时 或计数 结束时 由硬件自动置1 TR0 TCON 4 定时器 计数器T0的启动停止控制位 由软件设定 TR0 0 停止T0定时 或计数 TR0 1 启动T0定时 或计数 TR1 TCON 6 定时器 计数器T1的启动停止控制位 由软件进行设定 TR1 0 停止T1定时 或计数 TR1 1 启动T1定时 或计数 6 2 3定时器 计数器工作原理 定时器 计数器工作原理如图6 2所示 6 2 3定时器 计数器工作原理 当 0时 为定时工作模式 计数脉冲是晶振的12分频 当 1时 为计数工作模式 外部计数脉冲由Ti P3 i 4 引入 6 2 3定时器 计数器工作原理 当GATE 0时 或门输出为高电平 与引脚 P3 2 i 无关 此时与门的输出仅由TRi决定 TRi 1 与门输出高电平 接通模拟控制开关 引入计数脉冲 进行定时 计数操作 TRi 0 与门输出低电平 断开模拟控制开关 定时 计数停止 6 2 3定时器 计数器工作原理 当GATE 1时 或门的输出由引脚 P3 2 i 决定 因此与门的输出由TRi和引脚 P3 2 i 共同决定 若TRi 1 而 P3 2 i 为高电平 则与门输出高电平 接通模拟控制开关 进行定时 计数 若TRi 1 而 P3 2 i 为低电平 则定时 计数停止 6 2 3定时器 计数器工作原理 当模拟控制开关接通时 计数寄存器在计数脉冲的作用下进行增1计数 当计数溢出时向计数溢出标志位TFi进位 6 3 1中断方式 定时器 计数器在中断方式下的编程步骤如下 1 开中断 2 设置中断优先级 3 TMOD初始化 4 设置定时 计数初值 5 启动定时 计数 6 编写定时 计数中断处理程序 6 3 2查询方式 定时器 计数器在查询方式下的编程步骤如下 1 关中断 2 TMOD初始化 3 设置定时 计数初值 4 启动定时 计数 5 查询TFi及相关处理 6 4定时器 计数器的工作方式 6 4 1工作方式0定时器 计数器T0和T1在方式0下的工作情况完全相同 此时的计数寄存器为13位 构成如下 方式0下的计数溢出值为8192 213 则 计数次数 8192 计数初值 公式6 1 定时时间 8192 计数初值 机器周期 公式6 2 6 4 1工作方式0 方式0没有充分利用16位计数寄存器的计数范围 这是为了与MCS 48系列单片机兼容 13位的计数寄存器的初始化有些烦琐 步骤如下 1 由公式6 1和6 2计算出十进制的计数初值 2 若计数初值小于32 25 将其送入TLi 将0送入THi 完成计数寄存器初始化 3 若计数初值不小于32 先将其转化为二进制形式 补足13位后 将低5位送入TLi 将高8位送入THi 完成计数寄存器初始化 6 4 1工作方式0 例6 1 设fOSC 6MHz 定时器 计数器T0以工作方式0定时2ms 编写初始化程序 说明 fOSC即为晶振频率 首先计算计数初值 根据公式6 2有 定时时间 8192 计数初值 12fOSC计数初值 8192 定时时间 fOSC 12 8192 2000 6MHz 12 7192 0E018H 1110000011000B 6 4 1工作方式0 设置TMOD 对T0的工作方式进行选择 因此设置TMOD的低4位 定时 为0 方式0 M1M0的组合为00 与外部脉冲无关 GATE为0 初始化程序如下 MOVTMOD 00H 设置TMODMOVTH0 0E0H 设置计数初值MOVTL0 18HSETBTR0 启动定时 6 4 1工作方式0 例6 2 设fosc 6MHz 定时器 计数器1以工作方式0实现在P2口8个引脚产生频率为250Hz的等宽方波 光盘提供Proteus仿真文件 运行仿真文件夹 第6章 LT6 2 LT6 2 DSN 观察运行结果 并进一步分析源程序 图6 3P2 X引脚输出的方波 仿真截图 6 4 1工作方式0 1 首先计算定时时间 方波频率为250Hz 则周期为4ms 即P2口8个引脚每2ms取反一次 定时时间为2ms 2 计算计数初值 如例6 1所述 计数初值为 0E018H 1110000011000B 3 设置TMOD 对T1的工作方式进行选择 因此设置TMOD的高4位 6 4 1工作方式0 定时 为0 方式0 M1M0的组合为00 与外部脉冲无关 GATE为0 4 编制程序 中断方式 如下 ORG0000HLJMPMAINORG001BHAJMPSFT1ORG0050HMAIN MOVA 00H 6 4 1工作方式0 SETBEA 开中断SETBET1MOVIP 0 设置中断优先级MOVTMOD 00H 设置TMOD T1工作 方式0 计时MOVTH1 0E0H 设置计数初值MOVTL1 18HSETBTR1 启动定时 6 4 1工作方式0 SJMP ORG0100HSFT1 MOVTH1 0E0H 重新设置计数初值MOVTL1 18HCPLAMOVP2 ARETIEND注意 由于一次计数溢出时计数寄存器的内容为0 在下次计数前需要重新为计数寄存器赋初值 6 4 2工作方式1 定时器 计数器T0和T1在方式0下的工作情况完全相同 此时的计数寄存器为16位 构成如下 方式1下的计数溢出值为65536 216 则 计数次数 65536 计数初值 公式6 3 定时时间 65536 计数初值 机器周期 公式6 4 6 4 2工作方式1 方式1利用了全部16位计数寄存器的计数范围 计数寄存器的初始化步骤如下 1 由公式6 3和6 4计算出十进制的计数初值 2 若计数初值小于256 28 将其送入TLi 将0送入THi 完成计数寄存器初始化 3 若计数初值不小于256 将其转化为十六进制形式 再将高低字节分别送入THi和TLi 完成计数寄存器初始化 6 4 2工作方式1 例6 3 设fosc 12MHz 定时器 计数器0以工作方式1实现在P2口8个引脚产生频率为250Hz的等宽方波 光盘提供Proteus仿真文件 运行仿真文件夹 第6章 LT6 3 LT6 3 DSN 观察运行结果 并进一步分析源程序 图6 4P2 X引脚输出的方波 仿真截图 6 4 2工作方式1 1 首先计算定时时间 方波频率为250Hz 则周期为4ms 即P2口8个引脚每2ms取反一次 定时时间为2ms 计算计数初值 根据公式6 4有 定时时间 65536 计数初值 12fOSC计数初值 65536 定时时间 fOSC 12 65536 2000 12MHz 12 63536 0F830H 6 4 2工作方式1 2 设置TMOD 对T0的工作方式进行选择 因此设置TMOD的低4位 定时 为0 方式1 M1M0的组合为01 与外部脉冲无关 GATE为0 3 编制程序 查询方式 如下 ORG0000HAJMPMAIN 6 4 2工作方式1 ORG0050HMAIN MOVA 00HCLREA 关中断MOVTMOD 01H 设置TMOD T0工作方 式1 计时MOVTH0 0F8H 设置计数初值MOVTL0 30HSETBTR0 启动定时 6 4 2工作方式1 WAIT JNBTF0 WAITCLRTF0 注意 将TF0软件清0MOVTH0 0F8HMOVTL0 30HCPLAMOVP2 ASJMPWAITEND 6 4 2工作方式1 例6 4 设fOSC 6MHz 编程实现以定时器 计数器T0方式1定时控制在P2口8个引脚产生周期为2s的方波 光盘提供Proteus仿真文件 运行仿真文件夹 第6章 LT6 4 LT6 4 DSN 观察运行结果 并进一步分析源程序 图6 5P2 X引脚输出的方波 仿真截图 6 4 2工作方式1 1 首先计算定时时间 方波周期为2s 即P2口8个引脚每1s取反一次 定时时间为1s 2 计算计数初值 根据公式6 4有 定时时间 65536 计数初值 12fOSC计数初值 65536 定时时间 fosc 12 6 6MHz 12 65536 500000 0 6 4 2工作方式1 这里 计数初值大于计数溢出值 说明定时不能一次完成 考虑到500000 50000 10 设一次计数次数为50000 则计数初值 65536 50000 15536 3CB0H这样的定时需要10次才能完成题目要求 每次定时0 1秒 6 4 2工作方式1 3 设置TMOD 对T0的工作方式进行选择 因此设置TMOD的低4位 定时 为0 方式0 M1M0的组合为01 与外部脉冲无关 GATE为0 6 4 2工作方式1 4 编制程序 中断方式 如下 ORG0000HAJMPMAINORG000BHAJMPSFT0 6 4 2工作方式1 ORG0050HMAIN MOVA 00HSETBEA 开中断SETBET0MOVIP 0 设置中断优先级MOVTMOD 01H 设置TMOD T0工作 方式1 计时MOVTH0 3CH 设置计数初值MOVTL0 0B0HMOVR7 10 设置定时次数SETBTR0 启动定时 6 4 2工作方式1 SJMP ORG0100HSFT0 MOVTH0 3CH 注意 重新设置计数 初值MOVTL0 0B0HDJNZR7 WAIT 定时不够1s则等待MOVR7 10CPLAMOVP2 AWAIT RETIEND 6 4 2工作方式1 例6 5 设fOSC 12MHz 编程测试引入的外部脉冲信号的高电平宽度 机器周期数 参看仿真文件 测脉宽 DSN分析 外部脉冲来自 应由T0的外部控制电路进行定时 测试的高电平宽度 即高电平时进行定时 低电平时停止定时 应设置T0的门控位GATE为1 6 4 2工作方式1 T0用来累加高电平的宽度 计数初值为0 应选择计数范围大的工作方式 令其方式1定时 编制程序 查询方式 如下ORG0000HAJMPMAINORG0050HMAIN CLREX0CLRET0MOVTMOD 9 T0方式1 Gate 1MOVTH0 0 计数器清0MOVTL0 0 6 4 2工作方式1 CLRET0MOVTMOD 9 T0方式1 Gate 1MOVTH0 0 计数器清0MOVTL0 0W1 JBP3 2 W1 让过高电平SETBTR0 启动定时计数 6 4 2工作方式1 W2 JNBP3 2 W2 等候上升沿 自动启动计数W3 JBP3 2 W3 定时计数CLRTR0 停止定时计数MOV30H TL0 将脉冲宽度存入在31H 30H寄存器中MOV31H TH0 6 4 3工作方式2 由于每次定时 计数之后计数寄存器的内容为0 在下一次定时 计数后都要进行初值重载 在方式0和方式1中 初值重载是由软件实现的 如果需要多次进行定时 计数 则需占用较多CPU时间 定时器 计数器在方式2下可由硬件实现初值重载 T0和T1在方式2下为8位定时器 计数器 二者的工作情况相同 由TLi充当计数寄存器 由THi充当初值重载寄存器 如图6 3所示 6 4 3工作方式2 图6 6定时器 计数器方式2下的初值重载 6 4 3工作方式2 在方式2下 当低8位计数器产生计数溢出时 一方面会把溢出信号写入TFi 一方面会启动THi自动为TLi赋初值 方式2下的计数溢出值为256 28 则 计数次数 256 计数初值 公式6 5 定时时间 256 计数初值 机器周期 公式6 6 6 4 3工作方式2 方式2只利用了低8位计数寄存器 因此计数初值一定小于256 计数器的初始化步骤如下 1 由公式6 5和6 6计算出十进制的计数初值 2 将计数初值送入TLi 也将其送入THi 完成计数寄存器初始化 工作方式2通常用于波特率发生器 我们将在串行接口中讲解 注意 方式2下计数初值既要送入TLi 也要送入THi 6 4 3工作方式2 例6 6 设fOSC 12MHz T0方式2计数 T1方式2定时 编程实现在P1 0脚输出频率为10kHz的方波 将P1 0上的信号进行12分频为在P1 5脚输出 P1 0输出的脉冲作为T0的计数脉冲 光盘提供Proteus仿真文件 运行仿真文件夹 第6章 LT6 6 LT6 6 DSN 观察运行结果 6 4 3工作方式2 图6 7P1 0和P1 5引脚输出的方波 仿真截图 6 4 3工作方式2 1 首先计算定时时间 P1 0脚上输出的方波频率为10kHz 则周期为0 1ms 即P1 0引脚每50 s取反一次 定时时间为50 s 2 计算计数初值 根据公式6 6有 T1的定时时间 256 T1计数初值 12fOSCT1的计数初值 256 T1定时时间 fosc 12 256 50 12MHz 12 206 6 4 3工作方式2 P1 5脚的方波为对P1 0脚方波的12分频 即P1 5脚的方波周期为P1 0脚方波周期的12倍 即P1 0脚每输出6个脉冲 P1 5脚取反一次 根据公式6 5有 T0的计数初值 256 T0的计数次数 256 6 250 6 4 3工作方式2 3 设置TMOD T0方式2计数 与外部脉冲无关 TMOD的低4位为0110 T1方式2定时 与外部脉冲无关 TMOD的高4位为0010 4 编制程序 中断方式 如下 ORG0000HAJMPMAINORG000BH T0的中断服务程序CPLP1 5RETI 6 4 3工作方式2 ORG001BH T1的中断服务程序CPLP1 0RETIORG0050HMAIN SETBEA 开中断SETBET0SETBET1 6 4 3工作方式2 MOVIP 4 设置中断优先级 MOVTMOD 26H 设置TMOD T0方 式2计数 T1方式2定时MOVTL0 250 设置计数初值MOVTH0 250MOVTL1 206MOVTH1 206 6 4 3工作方式2 SETBTR0 启动计数SETBTR1 启动定时HERE SJMPHEREEND 6 4 3工作方式2 本题中T1控制输出的脉冲是T0的计数脉冲 是引起T0中断的原因 如果两者同时产生计数溢出 则应先响应T1的中断请求 即T1的优先级高于T0的优先级 定时器 计数器工作在方式2下 在计数溢出时具有初值自动加载功能 无需在中断服务程序中重载计数初值 中断服务程序的长度不超过8个字节时 直接在中断程序入口处编写中断服务程序即可 无需另外开辟中断程序服务区 6 4 4工作方式3 定时器 计数器T0在方式3下是双8位计数器结构 定时器 计数器T1在方式3下停止计数 图6 4是定时器 计数器T0在方式3下的逻辑电路图 6 4 4工作方式3 图6 8T0在方式3下的逻辑电路图 6 4 4工作方式3 T0的低8位 TL0 在方式3下占用T0的控制位和引脚信号 成为一个8位的定时 计数器 其功能和操作与方式0和方式1完全相同 6 4 4工作方式3 T0的高8位 TH0 在方式3下借用T1的TR1和TF1 成为一个8位的定时器 这样 在方式3下 定时器 计数器T0就构成了两个8位的定时器和一个8位的计数器 6 4 4工作方式3 如果定时器 计数器T0工作在方式3下 那么定时器 计数器T1只能工作于方式0 1 2下 由于没有TR1可用 只要为T1的计数寄存器装入初值 再设置好工作方式 T1就可以自动运行了 通常 只有当T1用作波特率发生器时 T0才会工作于方式3下 由于没有TF1可用 T1只能把计数溢出直接送给串行口 将T1的方式控制设置为方式3 T1就会停止计数 6 5定时器 计数器的综合应用举例 时间是控制系统中的一个重要参数 这一节有4个例题 都是很有用的题目 由于篇幅的原因 其内容转移到光盘 需要选用此例题可以查看光盘文件 定时器综合应用举例 DOC 这里只留下例题的内容说明 6 5定时器 计数器的综合应用举例 例6 7 编写一段程序 让P2口输出占空比为70 频率为100Hz的矩形波 单片机晶振为6MHz 光盘提供Proteus仿真文件 运行仿真文件夹 第6章 LT6 7 LT6 7 DSN 观察运行结果 并进一步分析源程序 图6 9P2 X引脚输出的波形 仿真截图 6 5定时器 计数器的综合应用举例 分析 100Hz的方波周期 1 100 0 01s 10ms 高电平时间为7ms 低电平为3ms 对于这种高 低电平不一致的波形 通常取出两个时间的相同单位时间作为定时器的定时时间 对不同电平采用不同的定时次数 本题可用1ms作为定时器的定时时间 高电平段定时7次 低电平段定时3次 定时器计数初值 65536 1000 2 65036 FE0CH源程序 略 6 5定时器 计数器的综合应用举例 例6 8 由P3 4引脚 T0 输入一个低频脉冲信号 其频率 0 5KHz 当P3 4每发生一次负跳变脉冲时 P1 0输出一个500 s的同步脉冲 同时P1 1输出一个1ms同步正脉冲 晶振为6MHz 光盘提供Proteus仿真文件 运行仿真文件夹 第6章 LT6 8 LT6 8 DSN 观察运行结果 并进一步分析源程序 6 5定时器 计数器的综合应用举例 图6 10例题6 8的波形图 仿真截图 6 5定时器 计数器的综合应用举例 分析 按题意所示 初始P1 0输出高电平 初始P1 1输出低电平 T0采用方式2计数外部脉冲数 计一个脉冲 初始值为FFH 当加在P3 4上的外部脉冲负跳变时 T0加1 计数溢出 此时修改T0为500 s定时工作方式 并取反P1 0输出0 P1 1输出1 T0第一次定时500 s溢出后 P1 0恢复为1 6 5定时器 计数器的综合应用举例 T0第二次定时500 s溢出后 P1 1恢复为0 T0恢复为对p3 4上外部脉冲计数 晶振频率为6MHz 工作方式2初值为256 500 2 6源程序 略 6 5定时器 计数器的综合应用举例 例6 9 利用外部中断和T1 按钮每按一次计一次数 实现0 9计数循环显示 硬件连接如图6 5所示 光盘提供Proteus仿真文件 运行仿真文件夹 第6章 LT6 9 LT6 9 DSN 观察运行结果 并进一步分析源程序 6 5定时器 计数器的综合应用举例 图6 110 9循环计数器 6 5定时器 计数器的综合应用举例 分析 利用外部中断0中断实现计数值的显示 定时器T1外部计数 T1中断显示值清零 外部中断0中断和定时器T1外部计数同时发生 T1为高中断优先级 源程序 略 6 5定时器 计数器的综合应用举例 例6 10 利用定时器T0产生时钟信号 这个程序的目的是为了练习用定时器产生实时时钟信号 此程序是自动打铃器程序的一部分 个别地方有改动 主要是不让一些其他功能影响定时器的思路 程序文件名是 T0实时钟 ASM 6 5定时器
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全知识考试试题及答案
- 高利润返租商铺合同模板(3篇)
- 艾灸知识考试试题及答案
- 高新技术企业担保合同集合
- 民航工程结算与飞行安全保障协议
- 智能家居产业人才派遣与智能家居产品研发合同
- 体育场馆餐饮厨师招聘合同范本
- 环保专业面试题目及答案
- 2025至2030中国碳碳复合材料行业市场深度研究与战略咨询分析报告
- 金融风险管理教学课件
- 人教版(2024)八年级上册数学全册教案
- 中科大中级有机化学实验讲义
- 重庆医科大学护理学考研大纲
- 干部任免审批表(空白)【电子版】
- 品管圈提高痰培养标本留取率
- 中西医结合 围绝经期综合征课件
- 《新能源汽车电力电子技术》全册课件
- 护理管理学第五章 人力资源管理
- TSG11-2020 锅炉安全技术规程
- 土地管理法(1986年版)
- 动物遗传学第十章遗传病的传递方式.ppt
评论
0/150
提交评论