1 / 43

第 6 章 定时器与计数器

第 6 章 定时器与计数器. 6.1 定时和计数的基本概念 6.2 MCS-51 单片机定时 / 计数器的结构和工作原理 6.3 定时 / 计数器工作模式及其应用 6.4 综合应用举例. 6.1 定时和计数的基本概念. 背景知识. TH1 TL1 TH0 TL0 TMOD TCON. 背景知识. 为什么需要定时 / 计数器 ?. 根据规定的时间间隔完成某项控制功能. 为什么需要定时 / 计数器 ?. 根据规定的时间间隔完成某项控制功能. 根据需要的延时启动某项任务. 为什么需要定时 / 计数器 ?.

greta
Télécharger la présentation

第 6 章 定时器与计数器

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第6章 定时器与计数器 6.1 定时和计数的基本概念 6.2 MCS-51单片机定时/计数器的结构和工作原理 6.3 定时/计数器工作模式及其应用 6.4 综合应用举例

  2. 6.1 定时和计数的基本概念 背景知识

  3. TH1 TL1 TH0 TL0 TMOD TCON 背景知识

  4. 为什么需要定时/计数器? • 根据规定的时间间隔完成某项控制功能

  5. 为什么需要定时/计数器? • 根据规定的时间间隔完成某项控制功能 • 根据需要的延时启动某项任务

  6. 为什么需要定时/计数器? • 根据规定的时间间隔完成某项控制功能 • 根据需要的延时启动某项任务 • 检测外部事件发生的次数

  7. 为什么需要定时/计数器? • 根据规定的时间间隔完成某项控制功能 • 根据需要的延时启动某项任务 • 检测外部事件发生的次数

  8. 为什么需要定时/计数器? • 根据规定的时间间隔完成某项控制功能 • 根据需要的延时启动某项任务 • 检测外部事件发生的次数

  9. 为什么需要定时/计数器? • 根据规定的时间间隔完成某项控制功能 • 根据需要的延时启动某项任务 • 检测外部事件发生的次数

  10. 为什么需要定时/计数器? • 根据规定的时间间隔完成某项控制功能 • 根据需要的延时启动某项任务 • 检测外部事件发生的次数

  11. 如何实现? • 软件延时 • 采用延时电路实现固定的硬件延时 • 采用可编程定时/计数器实现 可编程定时/计数器(Timer/Counter,简称T/C)正是MCS-51单片机的一种重要的功能部件

  12. 可编程定时/计数器(T/C)工作原理? 例:往桶里滴水,考察其溢出时间:

  13. 可编程定时/计数器(T/C)工作原理? 例:往桶里滴水,考察其溢出时间:

  14. 可编程定时/计数器(T/C)工作原理? 例:往桶里滴水,考察其溢出时间:

  15. 可编程定时/计数器(T/C)工作原理? 例:往桶里滴水,考察其溢出时间:

  16. 可编程定时/计数器(T/C)工作原理? 例:往桶里滴水,考察其溢出时间: • 桶有多大?------定时/计数范围 • 滴水的速度?----时钟源频率 • 原来有多少水?--初值问题 • 如何知道溢出?--溢出时的反应

  17. 6.2.1 定时/计数器概述 图6-1 定时/计数器结构

  18. 图6-2 定时/计数器控制逻辑

  19. 6.2.2 单片机定时/计数器的工作方式 定时器工作方式 设置为定时器工作方式时,基准时间由单片机的晶振经过12分频后获得的一个脉冲信号,即机器周期信号。机器周期信号输入到加1计数器,加1计数器实现每个机器周期使T0或T1的计数寄存器数值增加1,直至计满溢出,根据计数机器周期的次数可以得到定时时间。 计数器工作方式 设置为计数方式时,外部脉冲信号输入到引脚T0(P3.4)和T1(P3.5),CPU对外部脉冲信号进行采样计数,加1计数器由外部输入脉冲信号的下降沿触发计数。

  20. 计数方式具体工作过程 计数器在每个机器周期的S5P2期间采样T0和T1引脚的输入电平,若前一个机器周期采样值为1,下一个机器周期采样值为0,则计数器加1。所以检测一个从1到0的跳变需要两个机器周期,即外部输入信号的周期应大于或等于两个机器周期,也就是说外部输入信号的频率必须小于晶振频率的1/24,若频率超过晶振频率的1/24,则无法准确计数脉冲个数。虽然对外部输入信号的占空比无特殊要求,但是为了确保输入信号电平在变化之前至少被采样一次,要求电平保持时间至少是一个完整的机器周期。对输入脉冲信号的基本要求如图6-3所示。

  21. 图6-3 对输入脉冲宽度的要求

  22. GATE C/ T M1 M0 GATE C/ T M1 M0 D7 D6 D5 D4 D3 D2 D1 D0 TMOD (89H) 定时器T1 定时器T0 6.2.3 工作模式寄存器 TMOD TMOD用于控制T0和T1的工作模式。 TMOD不能位寻址,只能用字节设置定时器的工作模式,低半字节设置T0,高半字节设置T1。 8051系统复位时,TMOD的所有位被清0。 TMOD各位的定义格式如图所示

  23. —计数器/定时器方式选择位 设置为定时方式。定时器计数8051片内脉冲,即对机器周期计数 设置为计数方式。计数器的输入来自T0(P3.4)或T1(P3.5)端的外部脉冲 M1和M0—操作模式控制位。两位可形成四种编码,对应于四种模式。

  24. GATE—门控位。 GATE=0,只要用软件使TR0(或TR1)置1就可以启动定时器,而不管INT0(或INT1)的电平是高还是低。 GATE=1,只有INT0(或INT1)引脚为高电平且由软件使TR0(或TR1)置1时,才能启动定时器工作。

  25. 6.2.4 启动控制寄存器TCON TCON除可字节寻址外,各位还可位寻址。 8051系统复位时,TCON的所有位被清0。 TCON各位的定义格式如图所示。

  26. 6.3 定时/计数器工作模式及其应用 6.3.1模式 0 及其应用 6.3.2模式 1 及其应用 6.3.3模式 2 及其应用 6.3.4模式 3 及其应用

  27. 6.3.1 工作模式0及其应用 • 1 逻辑结构 • 2 模式0的应用

  28. 1 逻辑结构 图6-7 模式0时的逻辑结构图

  29. 2 工作模式0应用 例6.4 用T0定时,选择工作模式0,由单片机P1.0输出占空比为50%、周期为2ms的方波,晶振频率为12M。 (T=2mS=2000uS) 源程序如下: ORG 0000H LJMP MAIN ORG 000BH LJMP INT_TIME0 ORG 0030H MAIN: MOV TMOD, #00H ;设置工作方式 MOV TH0, #0E0H ;设初始值:1110 0000 0001 1000: ; 1C18H:7192 MOV TL0, #18H SETB TR0 ;启动定时器 SETB EA ;开放定时器中断 SETB ET0 SETB P1.0 LJMP $ INT_TIME0: MOV TH0, #0E0H ;对定时器重新赋值 MOV TL0, #18H CPL P1.0 RETI

  30. 6.3.2 工作模式1及其应用 • 1 逻辑结构 • 2 模式1的应用

  31. 1 模式 1 的逻辑电路结构 图6-8 模式1逻辑结构图

  32. 2 模式 1 的应用举例 例6.7 用T1定时,选择工作模式1,由单片机P1.0输出50Hz的方波,晶振频率=12M。(T=20mS=20000uS) 源程序如下: ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV TMOD,#10H ;设置T1为模式1 SETB TR1 ;启动定时 LOOP: MOV TH1,#0D8H ;送初值:55536: MOV TL1,#0F0H JNB TF1,$ ;查询定时时间到否 CLR TF1 ;产生溢出,清标志位 CPL P1.1 ;取反 SJMP LOOP ;重复循环

  33. 6.3.3 工作模式2及其应用 • 1 逻辑结构 • 2 模式2的应用

  34. 1 模式 2 的逻辑电路结构 图6-9 模式2逻辑结构

  35. 2 模式 2 的应用举例 例6-10:利用定时器T1的模式2对外部信号计数。要求每计满 100次,将 P1.0引脚取反。 源程序:ORG 0000H LJMP MAIN ORG 001BH LJMP INT_TIME1 ORG 0030H MAIN: MOV TMOD,#60H ;设置T1为模式2,外部计数方式 MOV TL1,#9CH ;T1计数器初值:156 MOV TH1,#9CH SETB EA ;开放定时器中断 SETB ET1 SETB TR1 ;启动T1计数 HERE: SJMP HERE ;等待中断 INT_TIME1: CPL P1.0 RETI

  36. 6.4 综合应用举例 由于MCS-51单片机的定时/计数器是可编程的,因此在使用之前需要进行初始化。在编程时主要注意两点:第一要能正确写入控制字;第二能进行计数初值的计算。一般情况下,包括以下几个步骤: (1)确定工作方式,即对TMOD寄存器进行赋值。 (2)计算计数初值,并写入寄存器TH0、TL0或TH1、TL1 中。 (3)根据是采用中断还是查询方式决定是否置位ETx允许T/C 中断。 (4)根据是采用中断还是查询方式决定是否置位EA使CPU开 中断。 (5)置位TRx启动计数。

  37. 例6-11试选择定时/计数器T0测试INT0(P3.2)引脚上 输入的被测脉冲宽度,已经晶振频率=12M例6-11试选择定时/计数器T0测试INT0(P3.2)引脚上 输入的被测脉冲宽度,已经晶振频率=12M 分析:定时器可以用于测量脉冲宽度程序设计,测量外部脉冲宽度利用TMOD的门控位控制很方便,当设置GATE=1时,仅设置TR0(TR1)等于“1”,定时器不能被启动,还必须等外部脉冲高电平时,定时器才开始工作。 测试过程如图6-11所示 图6-11 被测脉冲波形

  38. 例6-11 源程序如下: ORG 0000H LJMP MAIN ORG 000BH LJMP INT_TIME0 ORG 0030H MAIN: MOV R2,#00H ;如果被测脉冲宽度太长,则累计溢出次数 MOV TMOD,#09H ;设置T0为模式1,门控方式 MOV TL0,#00H ;设置初值 MOV TH0,#00H SETB EA ;开放T0中断 SETB ET0 SETB TR0 ;INT0引脚高电平到来才会启动T0 JNB P3.2, $ ;等待高电平到来 JB P3.2,$ ;高电平到来,启动T0开始测量 CLR TR0 MOV R0,TH0 ;P3.2低电平,测量结束,保存结果 MOV R1,TL0 LJMP $ INT_TIME0: INC R2 MOV TL0,#00H MOV TH0,#00H RETI

  39. 例6-12: 电路如图6-12所示,P1.0引脚外接发光二极管D0, 要求D0以1s的间隔闪烁。已知晶振频率=12M 图6-12 例6-12电路原理图

  40. 例6-12源程序代码:1S=1000000uS=20*50000 ORG 0000H LJMP MAIN ORG 000BH LJMP INT_TIME0 ORG 0030H MAIN: MOV P1,#0FFH  ;灯的初态 MOV 30H,#00H   ;软件计数器预清0 MOV TMOD,#01H ;定时/计数器0工作于方式1 MOV TH0,#3CH MOV TL0,#0B0H ;初值15536,计50000次 SETB EA   ;开总中断允许 SETB ET0   ;开定时/计数器0允许 SETB TR0   ;定时/计数器0开始运行 LOOP: AJMP LOOP   ;真正工作时,这里可写任意程序 INT_TIME0: INC 30H   ;定时器0的中断处理程序 MOV A,30H CJNE A, #20,T_END    ;30H单元中的值到了20了吗? CPL P1.0      ;到了,取反P10 MOV 30H, #00H     ;清软件计数器 T_END:MOV TH0,# 3CH MOV TL0,# 0B0H    ;重置定时常数 RETI

  41. 例6-13 设一交通路口设红、黄、绿三盏交通灯,当红灯亮2s后,黄灯亮400ms,绿灯亮1s,试用单片机模拟交通灯控制 分析:单片机采用发光二极管模拟交通灯控制,即利用P1.0~P 1.2分别接红、黄、绿三个发光二极管。但是这里用到三个定时时间(2s、400ms 、1s),难道每个定时时间都编写不同的定时程序,那么如果需要更多的定时时间,怎么办?这里还是采用软件定时器的方式,即找到这几个定时的时间的公约数,利用软件计数器就可以完成不同的延时。

  42. 例6-13源程序如下: NumberOf50ms EQU 30H ;定义软件定时器的计数次数 ORG 0000H LJMP MAIN ORG 000Bh LJMP INT_TIME0 ORG 0030H MAIN: CLR P1.0 红灯亮 MOV NumberOf50ms,#28H 延时2s LCALL DELAY SETB P1.0 红灯灭 CLR P1.1 黄灯亮 MOV NumberOf50ms,#08H 延时400ms LCALL DELAY SETB P1.1 黄灯灭 CLR P1.2 绿灯亮 MOV NumberOf50ms,#14H 延时1s LCALL DELAY SETB P1.2 绿灯灭 LJMP MAIN

  43. DELAY: SETB ET0 SETB EA SETB TR0 MOV TMOD,#01H MOV TH0,#3CH (50000次:50mS) MOV TL0,#0B0H DEL_LOOP: MOV A, NumberOf50ms CJNE A, #00H,DEL_LOOP CLR TR0 RET ;************************* INT_TIME0: CLR EA MOV TH0,#3CH MOV TL0,#0B0H DEC NumberOf50ms SETB EA SETB ET0 RETI END

More Related