1.1嵌入式之51单片机 (定时器与中断系统简略描述)

这篇文章可以很好辅助江协大的视频,都是根据上课的内容进行补充和补全

51单片机的定时器都是内部的装置,作用就是用于计时系统,可以实现软件计时,或者是程序每隔一段时间完成操作

或者可以代替长时间的Delay,提高cpu的效率(在Delay中我们cpu都会延迟不动,这样就会浪费cpu的效率,我们就可以用定时器来代替Delay)等等,这两个是重要的作用

STC89C52

定时器个数:3 个(T0、T1、T2),T0 和 T1 与传统的 51 单片机兼容,T2 是此型号单片机增加的资源

注意:定时器的资源和单片机的型号是关联在一起的,不同的型号可能会有不同的定时器个数和操作方式,但一般来说,T0 和 T1 的操作方式是所有 51 单片机所共有的

简单来说就是定时器一般都是2到3个定时器

定时器框图

定时器在单片机内部就像一个小闹钟一样,根据时钟的输出信号,每隔 "一秒",(这个一秒只是类似闹钟的说法)计数单元的数值就增加一,当计数单元数值增加到 "设定的闹钟提醒时间" 时,计数单元就会向中断系统发出中断申请,产生 "响铃提醒",使程序跳转到中断服务函数中执行

时钟:提供计数单元的时钟脉冲

计数单元:时钟计数

中断系统:产生中断,执行定时任务

STC89C52 的 T0 和 T1 均有四种工作模式:

  • 模式 0:13 位定时器 / 计数器
  • 模式 1:16 位定时器 / 计数器(常用)
  • 模式 2:8 位自动重装模式
  • 模式 3:两个 8 位计数器 (我们只要掌握模式1就可以,剩下就不太常用)

模式 0:13 位定时器 / 计数器(少用)

  • 结构:由定时器的高 8 位寄存器({THx})(x 是 0 或 1) + 低 5 位寄存器({TLx})(仅用 TLx 的低 5 位),共同组成 13 位的计数单元。
  • 计数范围:(0~ 2^13-1 )= 8191(最多计 8192 个数
  • 特点:是早期 51 单片机的兼容模式,初值计算麻烦(因为要拆分 13 位到 THx 和 TLx 的低 5 位)
  • 适用场景:现在基本不用,仅用于兼容老式程序(不重要)

模式 1:16 位定时器 / 计数器(常用)

  • 结构:由{THx})(高 8 位) + ({TLx})(低 8 位),组成完整的 16 位计数单元
  • 计数范围:(0~ 2^16-1) = 65535(最多计 65536 个数),定时 / 计数的范围比模式 0 大很多
  • 特点:需要手动设置初值;溢出后计数单元会清零,若要重复定时,需在中断服务函数里重新给 THx、TLx 赋值。
  • 适用场景最常用的模式,适合需要较长定时 / 计数的场景(比如毫秒级延时、外部信号计数)

模式 2:8 位自动重装模式(还行)

  • 结构:{TLx}作为 8 位计数单元,{THx}作为 "初值寄存器"(提前存好要重装的 8 位初值)
  • 计数范围:2^8-1 = 256(最多计 256 个数)
  • 特点:TLx(低4位) 计数溢出时,THx 里的初值会自动装入 TLx,无需手动重新赋值(避免了手动重装的误差)
  • 适用场景:适合需要高频、精确定时的场景,比如串口通信的 "波特率发生器"(需要稳定的时钟频率)

模式 3:两个 8 位计数器(少用)

  • 结构仅 T0 支持模式 3(T1 若设为模式 3 会停止工作)。此时 T0 被拆分为两个独立的 8 位单元:
  • TL0:使用原 T0 的资源(定时 / 计数、中断等);
  • TH0:占用 T1 的资源(用 T1 的中断、定时器时钟等)。
  • 特点:相当于 "额外扩展了一个 8 位定时器",但会占用 T1 的资源
  • 适用场景:需要同时运行多个独立定时任务的场景(比如同时需要两个不同频率的延时)

THO:time high的意思,0就代表着定时器0,TLO:time lower 这两个一共16bits,就是65535位

前面的定时器会提供脉冲后,TH0和TL0就会加一,当到最大值的时候就会向TF0申请中断

  • SYSclk:系统时钟,即晶振周期(系统时钟),本开发板上的晶振为 12MHz
  • T0Pin :外部时钟,这个相当于计数器(因为外部来一个脉冲,就会加一,这个相当于一个计数器)(不常用)

后面还有一个 C/T=0 和 C/T=1 :

当你选择是0(低电平)的时候,就代表的是T,也就是time定时器

那如果选择的是1(高电平)的时候,就代表的是C,也就是counter计数器

这个图里 TM0PS(定时器 0 的时钟路径)后的两个分支是定时器 0 的 "时钟分频选择" 模块,作用是决定定时器 0 的计数脉冲频率,核心是通过寄存器位切换 "系统时钟的分频系数":

分支 1:÷12

  • 对应条件:图中AUXR.7/T0x12=0(STC89C52 的 AUXR 寄存器第 7 位设为 0)
  • 功能:这是传统 51 单片机的兼容分频方式------ 系统时钟(SYSclk)先除以 12,再作为定时器 0 的计数脉冲
    比如开发板晶振是 12MHz,分频后计数脉冲频率为 12MHz ÷ 12 = 1MHz,即每 1μs 计数单元加 1

分支 2:÷1

  • 对应条件:图中AUXR.7/T0x12=1(AUXR 寄存器第 7 位设为 1)
  • 功能:这是STC89C52 新增的高速分频方式------ 系统时钟不做分频,直接作为定时器 0 的计数脉冲
    同样 12MHz 晶振,计数脉冲频率就是 12MHz,即每 1/12μs 计数单元加 1,计数速度比 ÷12 模式快 12 倍

中断系统就是使CPU有应对突发事件的能力而设置的,中断系统可以指定优先级的任务进行操作

STC89C52 中断资源(和定时器一样每一个型号的资源都不一样)

  • 中断源个数:8 个(外部中断 0、定时器 0 中断、外部中断 1、定时器 1 中断、串口中断、外部中断 2、外部中断 3)一般的51单片机都是没有后面的外部中断1和2,STC补充了
  • 中断优先级个数:4 个 (一般的也是只有2个而已)

定时器控制寄存器TCON

定时器模式寄存器

注意:

中断系统

IE 是中断允许寄存器,决定 "哪些中断能被 CPU 响应",相当于 "开关总闸 + 分闸"

  • EA:中断总允许位(图中设为 1):必须置 1,所有中断才能生效;若 EA=0,所有中断都被屏蔽
  • EX0:外部中断 0 的分允许位(图中设为 1):置 1 则允许外部中断 0,置 0 则屏蔽
  • ET0:定时器 0 中断的分允许位(图中设为 1):置 1 则允许定时器 0 中断
  • EX1:外部中断 1 的分允许位(图中设为 1):逻辑同 EX0。
  • ET1:定时器 1 中断的分允许位(图中设为 0):置 0 则屏蔽定时器 1 中断
  • ES:串口中断的分允许位(图中设为 1):置 1 则允许串口中断

IP 是中断优先级寄存器,决定 "多个中断同时请求时,先响应谁",51 架构支持 "高、低"2 个优先级:

  • PX0:外部中断 0 的优先级(图中设为 1):1=高优先级,0=低优先级
  • PT0:定时器 0 的优先级(图中设为 0):0=低优先级
  • PX1:外部中断 1 的优先级(图中设为 1):高优先级
  • PT1:定时器 1 的优先级(图中设为 0):低优先级
  • PS:串口中断的优先级(图中设为 0):低优先级
相关推荐
Zeku10 小时前
20251125 - 韦东山Linux第三篇笔记【上】
linux·笔记·单片机
芯联智造13 小时前
【stm32简单外设篇】- 单路 TTP223 电容式触摸传感器
c语言·stm32·单片机·嵌入式硬件
张工在路上14 小时前
(深入探讨句柄泄漏、内存泄漏检测工具)我将分析可能导致内存泄漏(包括托管内存和非托管内存,如句柄泄漏)
stm32·单片机·嵌入式硬件
工程师平哥15 小时前
APE-01 新建工程
笔记·嵌入式硬件
恒锐丰小吕16 小时前
无锡黑锋 HF6206 系列低压差线性稳压器技术解析
嵌入式硬件·硬件工程
周周记笔记19 小时前
[元器件专题] RC充电电路(七)
嵌入式硬件·测试工具·硬件开发
ACP广源盛1392462567319 小时前
GSV2712@ACP#2 进 1 出 HDMI 2.0/Type-C DisplayPort 1.4 混合切换器 + 嵌入式 MCU
单片机·嵌入式硬件·计算机外设·音视频
沉在嵌入式的鱼19 小时前
STM32--GY906体温检测传感器
stm32·单片机·嵌入式硬件·gy906·体温检测
cooldream200919 小时前
基于 RISC-V VisionFive 的桌面数字时钟项目实战
嵌入式硬件·risc-v·嵌入式开发