《6 定时器计数器.ppt》由会员分享,可在线阅读,更多相关《6 定时器计数器.ppt(49页珍藏版)》请在金锄头文库上搜索。
1、1 6定时器 计数器 定时器 计数器的结构及工作原理 定时器 计数器的工作方式 定时器 计数器的应用 2 在测量控制系统中 常需要有实时时钟和计数器 以实现定时 或延时 控制以及对外界事件进行计数 常用的定时 或延时 方法有 软件延时 硬件定时 可编程定时器 计数器 定时器 计数器的结构及工作原理 定时器 计数器 工作原理 3 80C51中有两个可编程定时器 计数器T0 T1 定时器 计数器 工作原理 4 定时器 计数器的结构 以T1工作于方式1为例 定时器和计数器是同一个部件 其核心是一个可预置初值的16位加1计数器 特殊功能寄存器TH1 TL1 对输入的脉冲进行计数 TF1 溢出标志 当计
2、数器计到全1时 FFFFH 此时 再来一个计数脉冲 计数器清0 产生溢出 TF1由0变为1 脉冲源 运行控制电路 定时器 计数器 工作原理 一 定时器 计数器的工作原理 5 计数器的初值与计数值 初值 216 计数值X 可预置初值的加计数器 初值计数值XFFFFH1FFFEH2 0001H655350000H65536 216 定时器 计数器 工作原理 6 工作模式 计数 对输入引脚T0 P3 4 T1 P3 5 的脉冲进行计数 计数次数X 216 计数初值 定时 将时钟脉冲经12分频后的脉冲 即机器周期脉冲 作为计数的脉冲源 定时时间Tc X TM 216 初值 12 fosc即对机器周期脉
3、冲TM进行计数 二者的主要区别在于计数脉冲的来源不同 定时器 计数器 工作原理 7 定时器 计数器的运行控制 运行控制位 门控位 定时器 计数器 工作原理 8 二 定时器 计数器的控制寄存器 1 定时器控制寄存器TCONTCON可位寻址 定时器 计数器T0溢出标志 计数器溢出时 TF0置 1 可用于软件查询或向CPU申请中断 定时器 计数器T0的运行控制位 当GATE 0时 只要TR0 1 T0就开始工作 定时器 计数器 工作原理 9 2 定时器工作方式寄存器TMOD 门控位 计数 定时选择位 1 计数 0 定时 M1M0 工作方式选择位00 方式0 13位计数器01 方式1 16位计数器10
4、 方式2 两个8位计数器自动重装初值11 方式3 仅T0可用 定时器 计数器 工作原理 TMOD不可位寻址 10 3 方式1的应用 1 定时器 计数器的应用步骤 合理选择定时器的工作方式 计算计数初值计数 计数初值 216 计数值X定时 计数初值 216 定时时间Tc 机器周期TM 216 Tc fosc 12 编写应用程序 定时器 计数器的初始化 定义TMOD 写入定时初值 设置中断系统 启动定时器运行 定时器 计数器的中断服务程序 定时器 计数器 方式1应用 11 定时器 计数器 方式1应用 2 定时器 计数器应用举例 例 利用定时器T0定时 在P1 0引脚输出周期为1毫秒 频率为1KHz
5、 的方波信号 fosc 6MHz 分析 按题义 就是要将P1 0的输出信号每间隔500 s翻转一次 选择T0工作于定时 方式1 定时时间为500 s TMOD 00000001B 01H 计算初值fosc 6MHz 机器周期TM 2 s要定时500 s即要计250个机器周期脉冲 初值 216 250 65286 FF06H 12 ORG0000HLJMPMAIN 转主程序ORG000BH T0中断服务程序入口地址LJMPT0 转T0中断服务程序ORG0030H 主程序MAIN MOVSP 60H 设置堆栈指针MOVTMOD 01H T0工作于定时 方式1MOVTH0 0FFHMOVTL0 06
6、H 置定时器初值SETBEA 中断总允许SETBET0 允许T0中断SETBTR0 启动T0运行SJMP 实际应用中 这里应是其他程序 定时器 计数器 方式1应用 13 T0 MOVTL0 06H 中断服务程序 从000BH跳转 过来MOVTH0 0FFH 重新装入初值CPLP1 0 输出取反RETI 中断返回 定时器 计数器 方式1应用 14 定时器 计数器的工作方式 工作方式0 13位计数器方式 工作方式1 16位计数器方式 工作方式2 8位自动重装初值方式 工作计数器 存放初值 溢出的同时 将初值重新装入 定时器 计数器 工作方式 15 定时器 计数器 工作方式 注 Tc 定时时间TM
7、机器周期 16 工作方式3 仅T0可用 占用T1资源 TR1 TF1 只能作为8位定时器使用 使用T0的控制寄存器资源 定时器 计数器 工作方式 17 T0方式3下的T1工作方式 用作串行口波特率发生器 没有启动控制 设置好工作方式就开始运行 定时器 计数器 工作方式 18 工作方式2的应用 例 利用定时器T0定时 在P1 0引脚输出周期为1ms 频率为1KHz 的方波信号 fosc 6MHz 分析 选择T0工作于定时 方式2 定时时间为500 s TMOD 00000010B 02H 计算初值fosc 6MHz 机器周期TM 2 s要定时500 s即要计数250个机器周期脉冲 初值 28 2
8、50 6 06H 定时器 计数器 综合应用 定时器 计数器的综合应用 19 ORG0000HLJMPMAIN 转主程序ORG000BH T0中断服务程序入口地址LJMPT0 转T0中断服务程序ORG0030H 主程序MAIN MOVSP 60H 设置堆栈指针MOVTMOD 02H T0工作于定时 方式2MOVTL0 06H 置定时器初值MOVTH0 06H 置定时器重装初值SETBEA CPU允许中断SETBET0 允许T0中断SETBTR0 启动T0运行SJMP 实际应用中 这里应是其他程序 定时器 计数器 综合应用 20 中断服务程序 从000BH跳转过来T0 CPLP1 0 输出取反RE
9、TI 中断返回 使用方式2的好处就是它可以自动重新装入初值 定时时间比较精确 但是 定时时间短 定时器 计数器 综合应用 21 如何延长定时时间 定时器最大定时时间 方式1 Tcmax 216 TM方式2 Tcmax 28 TM 为了实现长时间的定时 如1S 我们引进软件计数器的概念 思路是这样的 先用定时器 计数器做一个500微秒的定时器 再设置一个2000次的软件计数器 每次定时时间到了以后将软件计数器中的值加1 如果软件计数器未计满2000次就直接返回 若计满2000次 中断了2000次 定时时间就延长成了500 s 2000 1S 定时器 计数器 综合应用 22 如何延长定时时间 例
10、假设系统时钟为6MHz 编写定时器T0产生1s定时的程序 1 选择工作方式 方式1最长可定时 131 072ms 2 计算初值 15536 3CB0HTH0 3CHTL0 B0H 3 中断10次 计数或循环 定时器 计数器 综合应用 23 如何延长定时时间 假设系统时钟为6MHz 编写定时器T0产生1s定时的程序 ORG0000HLJMPMAINORG000BHLJMPIT0ORG1000HMAIN MOVSP 60HMOVB 0AHMOVTMOD 01HMOVTL0 0BHMOVTH0 3CHSETBEASETBET0SJMP 定时器 计数器 综合应用 IT0 MOVTL0 0BHMOVTH
11、0 3CHDJNZB LOOPCLRTR0LOOP RETI 24 如何延长定时时间 例 假设系统时钟为12MHz 要求编写采用定时器T0 工作在方式3实现1s定时的程序 1 选择工作方式 TH0只能为定时器 定时时间设为250us TL0设为计数器 可设为200 当TH0定时溢出后 用软件复位的方法在T0引脚产生一个负脉冲 此时TL0就计数一次 当TL0计数满溢出后 定时时间为250 200 50ms 这样循环20次就可以定时1s 2 计算初值 TH0初值 250 250 06HTL0初值 256 200 38HTMOD 00000111B 07H 3 循环20次 定时器 计数器 综合应用
12、25 如何延长定时时间 假设系统时钟为12MHz 要求编写采用定时器T0 工作在方式3实现1s定时的程序 ORG0000HLJMPMAINORG1000HMAIN MOVB 14HMOVTMOD 07HMOVTH0 06HMOVTL0 38HSETBTR0SETBTR1LOOP1 JBCTF1 LOOP2SJMPLOOP1 定时器 计数器 综合应用 LOOP2 MOVTH0 06HCLRP3 4NOPNOPSETBP3 4JBCTF0 LOOP3SJMPLOOP1LOOP3 MOVTL0 38HDJNZB LOOP1END注意 查询方式工作 即查询计数器溢出标志位 26 计数器的应用 注意 外
13、部事件的最高计数频率为时钟频率的1 24 fosc 24 应用 例 利用T1计数 每计满12次 在P1 7输出一个正脉冲信号 选择T1工作于计数 方式2 计数值为12 TMOD 01100000B 60H 计算初值初值 256 12 244 F4H 定时器 计数器 综合应用 27 ORG0000HLJMPMAIN 转主程序ORG001BH T1中断服务程序入口地址SETBP1 7CLRP1 7 输出正脉冲ORG0030H 主程序MAIN MOVSP 60H 设置堆栈指针MOVTMOD 60H T1工作于计数 方式2MOVTL1 0F4H 置定时器初值MOVTH1 0F4H 置定时器重装初值SE
14、TBEA CPU允许中断SETBET1 允许T1中断SETBTR1 启动T1运行CLRP1 7 P1 7输出低电平SJMP 实际应用中 这里应是其他程序 定时器 计数器 综合应用 28 例 利用T0门控位检测出现在INT0引脚上的正脉冲宽度 解 先初始化T0工作于定时器方式1 初值为0 GATE设为1 测试过程如下 机器周期脉冲TM 在P3 2低电平时将TR0置 1 当P3 2变为高电平时T0开始运行 当P3 2变为低电平时T0停止 令TR0 0 此时 T0计数值 TM即为被测脉冲宽度 定时器 计数器 综合应用 29 MOVTMOD 09H T0定时 方式1 GATE 1MOVTL0 0MOV
15、TH0 0 定时器初值W1 JBP3 2 W1 等待P3 2变为低电平SETBTR0 若P3 2变为低电平 启动计数W2 JNBP3 2 W2 等待P3 2变为高电平W3 JBP3 2 W3 P3 2高 开始计数 等P3 2变为低CLRTR0 P3 2低 停止计数TR0 0MOV70H TL0MOV71H TH0 读计数值 乘以TM即为脉冲宽度 SJMP 定时器 计数器 综合应用 00001001BINIT0P3 2 30 例 采用定时器 计数器测量频率 定时器 计数器 综合应用 f N T 被测周期信号 单片机定时器 计数器1计数N 单片机定时器 计数器0定时T 单片机机器周期信号 频率f
16、N T 31 例 采用定时器 计数器测量频率 定时器 计数器 综合应用 32 定时器 计数器 综合应用 FMEAS MOVTMOD 52H 01010010BCLRET0CLRET1 中断禁止MOVTL1 0 Timer1清0MOVTH1 0MOVTL0 9CH Timer0置初值 100usMOVTH0 9CHMOVDPTR 03E8H 循环1000次 即定时0 1sCLRTF0SETBTR0SETBTR1 启动Timer0 Timer1FWAIT JNBTF0 FWAIT0 查询Timer0中断标志位 为0继续等待FWAIT1 DJNZDPTR FWAIT2 DPTR减1不为零 继续定时CLRTR1CLRTR0 DPTR为0 停止定时和计数MOV52H TH1MOV53H TL1 保存计数值SJMPFDISP 跳到计算和显示代码FWAIT2 CLRTF0 DPTR减1不为零 清TF0 继续定时FWAIT0 SJMPFWAIT TF0不为0 继续查询等待FDISP RET 中断查询方式可以避免中断响应处理时的误差 12MHz时f 500KHzTimer1可计数65536即655 36