6.1概述

定时/计数需求实现方式:

  • 软件延时:
    • 优点: 无额外的硬件开销,时间比较精确。
    • 缺点: 牺牲了CPU的时间。
  • 可编程定时器/计数器:
    • 特点: 通过软件编程来实现定时时间的改变,通过中断或查询方法来完成定时功能或计数功能。

定时器/计数器的核心与功能:

  • 核心: 是一个加1计数器。
  • 计数功能: 对外部脉冲下降沿计数,外部脉冲频率不能高于振荡脉冲频率的1/24。
  • 定时功能: 对内部时钟脉冲计数来实现定时,计数频率为振荡脉冲频率的1/12 (每个机器周期计数器加1)。
  • 设定与控制: 定时和计数功能的设定和控制通过软件来设定

6.2定时器/计数器T0、T1

基本组成:

  • 计数器: TH0、TL0和TH1、TL1。
  • 特殊功能寄存器: TMOD、TCON。
  • 时钟分频器
  • 输入引脚: T0、T1。
notion image

相关特殊功能寄存器详解

这一部分呢其实在Chapter5中断的章节就讲过了

TMOD (工作方式控制寄存器,MOD for mode)

  • 地址与寻址: 89H,不能位寻址。
  • 结构: 低4位定义T0,高4位定义T1。
notion image
  • 位定义:
    • GATE (门控位)
      • GATE=0: 以运行控制位TR0或TR1启动定时器。
      • GATE=1: 定时器除了受TRx控制之外,还受的控制
    • C/T̅ (定时方式或计数方式选择位)
      • C/T̅=0: 定时工作方式,对内部系统时钟脉冲计数
      • C/T̅=1: 计数工作方式。 对来自外部引脚(如P3.4/T0、P3.5/T1)的脉冲进行计数
      • 这里也就涉及到了引脚复用,也就是P3.4、P3.5的第二功能
    • M1、M0 (工作方式选择位)
      • 00: 方式0 (13位计数器)。
      • 01: 方式1 (16位计数器)。
      • 10: 方式2 (自动重装载的8位计数器)。
      • 11: 方式3 (分为两个8位计数器, 停止计数)。
复位时TMOD=00H,也就是所有寄存器默认工作在方式0,工作于定时器模式

TCON (控制寄存器,CON for control)

对应的事件触发TCON置位;TCON对应的位去请求对应的中断
位地址
8FH
8EH
8DH
8CH
8BH
8AH
89H
88H
位符号
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
  • 地址与寻址: 字节地址88H,位寻址地址为88H~8FH。
  • 外部中断控制
    • IT0 (TCON.0): 外部中断0触发类型选择位。
    • IT1 (TCON.2): 外部中断1触发类型选择位。
      • 1 代表 脉冲触发方式 (负跳变有效)。
      • 0 代表 电平触发方式 (低电平有效)。
    • IE0 (TCON.1): 外部中断0标志位。
    • IE1 (TCON.3): 外部中断1标志位。
  • 定时器控制
    • TF1 (TCON.7): T1的溢出标志,溢出时内部硬件置位。
    • TR1 (TCON.6): T1运行控制位 (0为停止, 1为启动)。
    • TF0 (TCON.5): T0的溢出标志,溢出时内部硬件置位。
    • TR0 (TCON.4): T0运行控制位 (0为停止, 1为启动)。

T0/T1的数据寄存器:

  • TH1 (8DH), TL1 (8BH), TH0 (8CH), TL0 (8AH)。
  • 复位后全自动清零。

定时器/计数器中断相关寄存器:

  • 中断允许寄存器IE:
    • EA: 中断允许总控制位。
    • ET0, ET1, ET2: T0, T1, T2的中断允许控制位 (0禁止, 1允许)。
  • 中断矢量:
    • 定时器T0: 000BH
    • 定时器T1: 001BH
  • 中断优先级寄存器IP:
    • PT0, PT1, PT2: T0, T1, T2中断优先级控制位 (0低优先级, 1高优先级)。

T0、T1的工作方式详解❗❗

方式0: 13位定时器/计数器 (M1=0, M0=0)

notion image
  • 计数结构: THx高八位和TLx的低5位构成,TLx高3位未用。
  • 计数范围: 1∼
  • 定时范围: 1∼ 个机器周期。
  • 定时时间计算: ( - 计数初值) × 机器周期。

方式1: 16位定时器/计数器 (M1=0, M0=1)

notion image
  • 计数结构: THx高八位和TLx的低8位 (16位) 组成。
  • 计数范围: 1
  • 定时范围: 1 个机器周期。定时时间计算: ( - 计数初值) × 机器周期。
【示例: 计算50ms定时时间所需的计数初值】
基于51单片机12MHz晶振的条件,我们来计算50ms定时所需的计数初值:
  1. 计算机器周期: 1个机器周期 = 12/12MHz = 1μs
  1. 50ms需要的机器周期数: 50ms = 50,000μs = 50,000个机器周期
  1. 计数初值计算: 65536 - 50000 = 15536 (3CB0H)
因此,TH0 = 3CH,TL0 = 0B0H
🌻
方式1定时是不精确的,因为每次溢出到重装载之间还有一定时间

方式2: 自动重装载的8位定时器/计数器 (M1=1, M0=0)

notion image
  • 特点:
    • TLx作为8位计数寄存器,THx作为8位计数常数寄存器。
    • TLx计数溢出后申请中断,同时THx的内容重新装入TLx中
    • 适用于串行口波特率发生器。
    • 【例题】请根据注释,完成对定时器T1的初始化,使其工作在方式2(8位自动重装载),用于产生特定的波特率。
      🌻
      方式二定时是最精确的

方式3: T0分为两个8位计数器 (M1=1, M0=1)

notion image
  • T0在此方式下的配置:
    • TL0: 作为8位定时器/计数器,占用T0的GATE、INT0、TR0、T0引脚 (P3.4)、TF0标志位以及T0的中断矢量 (000BH)。
    • TH0: 构成的8位定时器只能作为定时器使用,占用T1的TR1运行控制位、TF1溢出标志位及T1中断矢量 (001BH)。
  • T1在此方式下的状态:
    • 可选工作方式: 0、1或2。
    • 功能限制: 由于TF1及T1中断矢量被TH0占用,T1仅能作为波特率发生器或其它不需要中断的场合
    • 串行口应用: 作串行口波特率发生器时,T1的计数输出直接送至串行口。
notion image

定时器/计数器T2 (简介)

  • 核心特性: 16位定时器/计数器,具备自动重装载和捕获能力。
  • 3种工作方式:
    • 自动重装载
    • 捕获
    • 波特率发生器方式
  • T2相关专用寄存器:
    • T2CON (控制寄存器): 地址C8H, 可位寻址。
      • TF2 (T2CON.7): T2溢出标志,特定条件下需软件清除。
      • EXF2 (T2CON.6): T2外部标志,特定条件下置位并申请中断,需软件清除。
      • RCLK, TCLK (T2CON.5, T2CON.4): 串行中断接收/发送时钟选择位。
      • EXEN2 (T2CON.3): T2外部事件允许标志。
      • TR2 (T2CON.2): T2运行控制位。
      • C/T̅2 (T2CON.1): T2的定时或计数方式选择位。
      • CP/RL̅2 (T2CON.0): T2的捕获/重装载功能选择标志。
    • T2MOD (方式控制寄存器): 地址C9H, 不可位寻址。
      • T2OE (T2MOD.1): 允许T2的时钟信号输出到P1.0引脚。
      • DCEN (T2MOD.0): 向下计数允许位。
    • 数据寄存器: TH2 (地址CDH), TL2 (地址CCH)。
    • 捕获寄存器: RCAP2H (地址CBH), RCAP2L (地址CAH)。用于捕获计数器TL2、TH2的计数值,或预置计数初值。
  • T2工作方式选择逻辑: (基于RCLK+TCLK, CP/RL2, TR2的组合状态)
    • 自动重装载方式: RCLK+TCLK=0, CP/RL2=0, TR2=1
    • 捕获方式: RCLK+TCLK=0, CP/RL2=1, TR2=1
    • 波特率发生器方式: RCLK+TCLK=1, TR2=1
    • 关闭: TR2=0
  • T2工作方式图解:
    • 捕获方式结构图
    • 自动重装载方式结构图
    • 波特率发生器结构图

监视定时器 (看门狗) T3

  • 通俗名称: 看门狗 (Watchdog)。
  • 核心工作原理: 在预设时间内若T3未被重置,其计数溢出将强制单片微机复位,从而帮助系统从硬件或软件故障中恢复。
  • 基本构成 (以飞利浦80C552为例): 由一个11位的分频器和8位定时器T3组成。
  • 故障场景示例: 程序代码因起始位置错误等原因导致混乱,可能陷入死循环,此时看门狗可发挥作用。
  • T3计数脉冲时间特性:
    • 计算公式: t=12×211×Tosc=12×2048/fosc。
    • 示例: 若fosc=12MHz, 则t为2ms。
  • T3计数溢出时间特性:
    • 决定因素: 装入T3的初值 (T3为加1计数器)。
    • 示例:
      • 初值00H: 计数255 (0FFH) 次后溢出。
      • 初值FFH: 计数1次后溢出。
    • 可编程溢出时间范围 (当fosc=12MHz时): 2ms 至 255×2ms
  • T3的控制机制:
    • 专用寄存器PCON:
      • PD (PCON.1): 掉电方式位。当 PD=1 时,系统进入掉电方式。
      • WLE (PCON.4): 看门狗定时器允许重装标志。WLE置位后,定时器T3只能被软件装入;装入操作完成后,WLE位会自动清除。
    • /EW引脚 (8XC552的pin 6):
      • /EW=0: 计数器脉冲接通,T3开始工作;此时PD (PCON.1) 被强制为0,系统不能进入掉电模式。
      • /EW=1: 计数器脉冲被封锁,T3停止工作。
      • 注意: 看门狗功能与掉电模式不能同时使用。
notion image
  • 看门狗使用程序示例: 代码段
    • 外置WatchDog芯片方案: 以MAX813为例。
      • 连接方式示意图
      • 清除watchdog程序片段: 通常通过操作特定I/O引脚产生脉冲来喂狗。 代码段
      notion image

      定时器/计数器的应用编程

      • 定时器的应用
        • 溢出率与定时常数计算:
          • 定时常数 (TC): 为设定定时器溢出时间而预先置入计数器的数值。
          • 计算原理: 由于计数器是加1 (向上) 计数的,预先置入的常数应为目标计数值相对于计数器模数的补码。
          • 溢出时间公式:
            • notion image
            • t: 期望的定时时间
            • Tc: 机器周期 (12/)
            • : 晶振频率
            • L: 定时器/计数器的位数
            • TC: 需要装入的计数初值
          • 溢出率公式:
          • notion image
        • 不同方式下的计数器长度 (L):
          • T0/T1 方式0: L=13, 计数模
          • T0/T1 方式1: L=16, 计数模
          • T0/T1 方式2: L=8, 计数模
          • T2 (16位模式): L=16, 计数模
        • 定时器编程步骤:
            1. 根据要求的定时时间 t、选定的定时器工作方式 (确定 L) 及晶体振荡频率 fosc,计算出所需的计数值 N=t/Tc。
            1. 计算计数初值 TC=2L−N (对于向上计数器)。
            1. 将十进制的TC值转换成十六进制或二进制。
            1. 将计算得到的初值分别送入THi、TLi寄存器。
        • 初值装载指令示例:
          • T0/T1 方式0 (13位): TCB分解为TCH (高8位) 和TCL (低5位)。 代码段
            • T0/T1 方式1 (16位): TCB分解为TCH (高8位) 和TCL (低8位)。 代码段
              • T0/T1 方式2 (8位自动重装): TCB为8位重装载值。 代码段
                • T2 (16位模式): 与T0/T1的方式1类似,初值装入TH2, TL2;若使用自动重装,则重装值装入RCAP2H, RCAP2L。
              • 编程实例:
                • 例1: P1.0输出周期2ms方波 (T0方式0, fosc=6MHz, 定时1ms)
                  • 计算TC: Tc=12/6MHz=2μs. N=1ms/2μs=500. TC=213−500=8192−500=7692=1E0CH。分解为 TH0=F0H (11110000B), TL0=0CH (00001100B, 只用低5位)。
                  • TMOD设定: MOV TMOD, #00H (T0方式0, 定时, GATE=0)。
                  • 中断服务程序中重装初值并反转P1.0。
                • 例2: P1.0输出周期2ms方波 (T1方式1, fosc=6MHz, 定时1ms)
                  • 计算TC: N=1ms/2μs=500. TC=216−500=65536−500=65036=FE0CH。TH1=FEH, TL1=0CH。
                  • TMOD设定: MOV TMOD, #10H (T1方式1, 定时, GATE=0)。
                  • 中断服务程序中重装初值并反转P1.0。
                • 例2A: P1.0输出周期2ms方波 (T2, fosc=6MHz, 定时1ms, 自动重装载)
                  • 计算TC: N=1ms/2μs=500. 由于T2方式可以是自动重装载,通常直接设置计数值 N。若用向下计数,初值为 N−1=499=01F3H。 RCAP2H=01H, RCAP2L=F3H。
                  • T2CON, T2MOD设定: T2CON设置工作模式, T2MOD设置DCEN(若向下计数)。
                  • 中断服务程序中清除TF2并反转P1.0 (自动重装无需手动重装初值)。
                • 例3: 产生200µs和400µs方波,T1作串行口波特率发生器 (fosc=9.216MHz)
                  • 分析: T0方式3 (TL0定时100µs, TH0定时200µs), T1方式2 (波特率发生器)。
                  • 计算TC: Tc=12/9.216MHz≈1.302μs.
                    • TL0 (100µs): N0=100/1.302≈76.8. TC0=28−77=256−77=179=B3H.
                    • TH0 (200µs): N1=200/1.302≈153.6. TC1=28−154=256−154=102=66H.
                    • T1 (波特率2400bps): TC2=F6H (具体计算参考串行通信章节)。
                  • TMOD设定: MOV TMOD, #23H (T1方式2, T0方式3)。
                  • 中断服务程序分别处理TL0和TH0溢出。
            • 计数器的应用
              • 工作条件: TMOD中的C/T̅位设为1时,定时器/计数器工作在计数模式,对外部输入引脚T0 (P3.4)或T1 (P3.5)上的负跳变脉冲进行计数。
              • 例4: 扩展外部中断源,产生5KHz方波,T1作波特率发生器
                • 需求分析: 利用T0的方式3,TL0作为外部事件计数器 (模拟外部中断),TH0作为8位定时器产生方波。T1设置为方式2作为串行口的波特率发生器。
                • 常数计算 (fosc=12MHz, Tc=1µs):
                  • TH0 (产生5KHz方波,周期200µs,半周期100µs): N=100μs/1μs=100. TCTH0=28−100=156=9CH.
                  • TL0 (计数器,每来一个脉冲就中断): 初值设为FFH,这样下一个脉冲即溢出。
                • TMOD设定: MOV TMOD, #27H (T1方式2, T0方式3且TL0为计数器 C/T=1, TH0为定时器)。
                • 程序中分别处理INT0, INT1, TL0, TH0的中断。

            门控位GATE的应用

            • 功能: 当TMOD中的GATE位为1时,定时器/计数器的运行不仅受TRx位控制,还受外部中断引脚INTx的状态控制。TRx=1且INTx引脚为高电平时,定时器/计数器才会计数。
            • 定时器模式应用: 相当于对外部脉冲的宽度进行测量
            • 例5: 测量输入脉冲的高电平宽度 (查询方式)
            notion image
            • 测量大于定时器量程的脉冲宽度 (中断法)
              • 原理: 脉冲宽度 = (定时器溢出时间 × 溢出次数) + 最后不足一次溢出的定时时间。
              • 示例配置: T0方式1 (定时) GATE=1,T1方式1 (计数) 用于检测脉冲边沿。T1中断优先级高于T0。
              • 常数计算 (fosc=6MHz, Tc=2µs):
                • T0定时100ms: N=100ms/2μs=50000. TCT0=216−50000=15536=3CB0H.
                • T1计数初值: FFFEH (下降沿计数两次为一个周期,若测高电平则第一个下降沿启动T0,第二个下降沿停止T0,这里可能指用T1检测INT引脚变化)。 (课件中T1初值为FFEH,用于计数两次溢出)
            T1负责测量外部输入的波形的下降沿,两个下降沿意味着一个周期;T0负责计时
            T1负责测量外部输入的波形的下降沿,两个下降沿意味着一个周期;T0负责计时

            第六章作业

            Loading...
            Z_cosy
            Z_cosy
            浙江大学电气工程学院本科生
            公告
            🎉Welcome to Z-cosy🎉
            -- 食用指南 ---
            目前只有课程笔记以及电控学习笔记
            陆续会整理更多内容!