51单片机定时/计数器相关知识点

51单片机定时/计数器相关知识点

结构组成

51单片机的定时/计数器中有两个寄存器:

  • T0:低位:TL0(字节地址8AH)高位:TH0(字节地址8CH)
  • T1:低位:TL1(字节地址8BH)高位:TH1(字节地址8DH)

他们的控制通过两个特殊功能寄存器实现, 其中:

  • TMOD定时方式控制寄存器:确定定时/计数器的工作方式和功能
  • TCON定时控制寄存器:管理T0,T1的启停、溢出、中断

两个定时器都有一根连接外部的引脚P3.4,P3.5,用于接入外部计数脉冲信号。

当软件设置T0或T1启动定时/计数器后,他们会由硬件自动运行。无需CPU干预,直到计数器溢出后才会通过中断让CPU进行后续的处理。

定时/计数器的控制

TMOD定时方式控制寄存器

以下是TMOD的寄存器组成:

下面是对其中每一位的说明:

符号 功能
TMOD.7 GATE TMOD.7控制定时器1,置1时只有在 I N T 1 ‾ \overline {INT1} INT1脚为高及TR1控制位置1时才可打开定时器/计数器1。
TMOD.3 GATE TMOD.7控制定时器1,置1时只有在 I N T 0 ‾ \overline {INT0} INT0脚为高及TR1控制位置1时才可打开定时器/计数器1。
TMOD.6 C/ T ‾ \overline {T} T TMOD.6控制定时器1用作定时器或计数器,清零则用作定时器(从内部系统时钟输入),置1用作计数器(从T1/P3.5脚输入)
TMOD.2 C/ T ‾ \overline {T} T TMOD.2控制定时器0用作定时器或计数器,清零则用作定时器(从内部系统时钟输入),置1用作计数器(从T0/P3.4脚输入)
TMOD.5/TMOD.4 M1 M0 定时器/计数器1模式选择
TMOD.1/TMOD.0 M1 M0 定时器/计数器0模式选择

定时/计数器的模式选择,其对应模式如下:

T1定时器:

M1 M0 模式
0 0 13位定时器/计数器,兼容8048定时模式,TL1只用低5位参与分频,TH1整个8位全用。
0 1 16位定时器/计数器,TL1、TH1全用
1 0 8位自动重装载定时器,当溢出时将TH1存放的值自动重装入TL1
1 1 定时器/计数器1此时无效(停止计数)

T0定时器:

M1 M0 模式
0 0 13位定时器/计数器,兼容8048定时模式,TL0只用低5位参与分频,TH0整个8位全用。
0 1 16位定时器/计数器,TL0、TH0全用
1 0 8位自动重装载定时器,当溢出时将TH0存放的值自动重装入TL0
1 1 定时器0此时作为双8位定时器/计数器。TL0作为一个8位定时器/计数器,通过标准定时器0的控制位控制。TH0仅作为一个8位定时器,由定时器1的控制位控制

定时/计数器的工作方式

方式1

这里不介绍具体原理,读者知道以下几点即可:

  • M1M0 = 01时,定时/计数器工作在方式1状态
  • 这个状态下满计数值为216
  • T1和T0两个定时/计数器在方式1方面没有区别
  • 当C/ T ‾ \overline {T} T = 0时,为定时器工作方式
  • GATE的作用实际上是是否设置外部引脚控制定时,如果它为0,那么定时/计数器的开与关只与TR的状态有关
  • 当C/ T ‾ \overline {T} T = 1时,为计数器工作方式
  • 处在计数器工作方式时,以该定时器对应的引脚的负脉冲作为计数信号
  • 最高计数频率为(1/24)fOSC

关于定时/计数器的初值a与定时时间t的关系:

t = ( 2 16 − a ) ⋅ 12 / f O S C t = ( 2^{16} - a ) \cdot 12/ f_{OSC} t=(216−a)⋅12/fOSC

因此,当时钟频率为12MHz时,方式1的定时范围为1~65536μs

计数器初值a与计数值N的关为:
N = 2 16 − a N = 2^{16} - a N=216−a

因此,方式1的计数范围为1~65536个脉冲

方式2

当M1M0 = 10 时,定时/计数器工作于方式2

需要知道的有:

  • TLx(这里的x可以为0或者1,表示定时/计数器1或者0中的低八位寄存器)作为计数器,计满数值为28
  • THx记录TLx的初值,当TLx满时,由硬件自动将TLx的值还原为THx中的值
  • THx中的初值是由软件赋值的

定时方式2的定时时间t和计数初值分别按下式计算:

t = ( 2 8 − a ) ⋅ 12 / f O S C a = 2 8 − t ⋅ f O S C / 12 t = (2^8 - a) \cdot 12 / f_{OSC} \\ a = 2^8 - t \cdot f_{OSC} /12 t=(28−a)⋅12/fOSCa=28−t⋅fOSC/12

方式2可以产生非常精确的定时时间,适合作用于串行口波特率发生器

计数初值a与计数值N的关系为:
N = 2 8 − a N = 2^8 - a N=28−a

方式0

当M1M0 = 00 时,定时/计数器工作于方式0

需要知道的有以下几点:

  • 方式0采用低5位TLx和高8位THx组成13位的加1计数器
  • 满记数值为213
  • 初值不能自动重装
  • TLx中的高三位是无效的,可以为任意值

方式0的定时时间t与计数初值a分别按照下式计算:
t = ( 2 13 − a ) ⋅ 12 / f O S C a = 2 13 − t ⋅ f O S C / 12 t = (2^{13} - a) \cdot 12 / f_{OSC} \\ a = 2^{13} - t \cdot f_{OSC}/12 t=(213−a)⋅12/fOSCa=213−t⋅fOSC/12

计数初值a与计数值N的关系为:
N = 2 13 − a N = 2^{13} - a N=213−a

方式3

当M1M0 = 11时,定时/计数器工作于方式3

方式3与其他方式不同,方式3时,单片机可以组合出3种定时/计数器关系:

  1. TH0 + TF1 + TR1 组成带有中断功能的8位定时器
  2. TL0 + TF0 + TR0 组成带有中断功能的8位定时/计数器
  3. T1 组成的无中断功能的定时/计数器
相关推荐
代码游侠4 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
CODECOLLECT8 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen8 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠11 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_11 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技13 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计13 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
小龙报15 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
范纹杉想快点毕业15 小时前
嵌入式与单片机开发核心学习指南——从思维转变到第一性原理的深度实践
单片机·嵌入式硬件
Industio_触觉智能15 小时前
瑞芯微RK3566开发板规格书,详细参数配置,型号EVB3566-V1,基于RK3566核心板SOM3566邮票孔封装
嵌入式硬件·开发板·rk3568·rk3566·核心板·瑞芯微