硬件(二) 中断、定时器、PWM
一、独立按键模块
1. 硬件原理
P14刚开始为高电平(没按),按下K1后变低电平;
判断某个寄存器的值是否为零:eg:判断P1的第四位是否为零:if((P1 & (1<<4))== 0)
二、中断系统
1、什么是中断?什么是中断源?
2、中断处理流程是什么?
3、什么是中断嵌套?
4、什么是中断向量表?
5、51单片机的定时器工作原理是什么?
6、什么是PWM?PWM有哪些重要参数?
1.中断:CPU再执行当前事情的时候,外界发生了紧急事件的请求,然后要CPU暂停当前正在执行的事情而去执行这个紧急事件,处理完紧急事件,转而继续回到原来被打断的地方继续原来的工作;中断源:请求CPU进行中断的请求源。
2.①终端源发出中断请求;②内核检查是否需要响应中断,以及该中断是否被屏蔽;③内核检查中断的中断优先级;④保护现场;⑤执行中断服务函数;⑥恢复现场;
3.CPU在处理中断的时候,遇到了一个优先级更高的中断请求;如果当前CPU可以暂停处理该中断,转而去处理优先级更高的中断,处理结束后,再去处理当前处理的优先级较低的中断的话,这样的过程就叫中断嵌套。注意:51单片机可以执行二级中断嵌套。
4.就是存储中断函数的指针的数组,中断函数共有八种,分别是四个外部中断,三个定时中断,还有1个串口中断。
5.51单片机的晶振是用于提供系统时钟的,通过压电效应产生固定频率的机械振动,转化为电信号后输出方波。内部通常将晶振信号12分频后作为机器周期;单片机的定时器有两个16位的计数器(自增),每经过一个机器周期,计数器就会自动加一;在计数器计数超出所在范围后,会产生溢出,只要开启计数器,内核会检测到溢出位置一,就会发生一次中断。然后对CPU中断再进行一系列处理。
6.PWM就是脉冲调制,跳变方波;它有两个重要参数:周期和占空比。周期表示一个脉冲信号的长度;占空比表示高电平在一个周期内所占的时间比。
中断源 | 中断向量地址 | 中断请求标志位 | 中断允许控制位 | 对应引脚 |
---|---|---|---|---|
外部中断 0(INT0) | 0003H | IE0 | EX0 | P3.2 |
定时器 0(T0) | 000BH | TF0 | ET0 | - |
外部中断 1(INT1) | 0013H | IE1 | EX1 | P3.3 |
定时器 1(T1) | 001BH | TF1 | ET1 | - |
串口中断(UART) | 0023H | RI+TI | ES | P3.0(RXD)、P3.1(TXD) |
- 中断优先级:支持 4 级优先级(通过 IP/IPH 寄存器配置),低优先级不可打断高优先级,同优先级按 “查询次序” 响应(外部中断 0 > 定时器 0 > 外部中断 1 > 定时器 1 > 串口)。
1. 中断执行流程
- 中断请求:中断源触发(如外部引脚电平变化、定时器溢出),置位对应请求标志位(如 IE0、TF0);
- 中断检测:CPU 每执行完一条指令,检查 “中断总开关(EA)是否打开” 及 “该中断是否被允许(如 EX0、ET0)”;
- 优先级判断:优先响应高优先级中断;
- 保护现场:自动保存当前程序计数器(PC)值(用于后续返回);
- 执行服务函数:跳转到中断向量地址,执行用户编写的中断服务函数;
- 恢复现场:执行完后自动恢复 PC 值,返回原任务继续执行。
2. 中断与轮询的区别
对比维度 | 中断机制 | 轮询机制 |
---|---|---|
触发方式 | 设备主动通知 CPU | CPU 主动循环检查设备 |
资源占用 | 仅中断触发时占用 CPU,效率高 | 持续占用 CPU 周期,浪费资源 |
实时性 | 实时性强(紧急事件立即响应) | 实时性差(依赖检查间隔) |
实现方式 | 硬件触发 + 服务函数 | 软件循环判断 |
适用场景 | 紧急事件(如按键、传感器) | 低速、非紧急设备(如 LED 闪烁) |
三、定时器 / 计数器
1. 工作原理
- 本质:16 位 / 8 位加法计数器,从 “初值” 开始计数,每 1 个机器周期加 1,计满溢出后置位中断标志(如 TF0),触发中断。
- 核心公式:
机器周期 Tcy=fosc12(fosc 为晶振频率,51 单片机固定 12 分频);
定时时间 最大计数值初值。 - 常用晶振:12MHz(Tcy=1μs,计算方便)、11.0592MHz(串口波特率无误差)。
2. 关键寄存器
(1)定时器控制寄存器(TCON,地址 88H,可位寻址)
位号 | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
---|---|---|---|---|---|---|---|---|
符号 | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
功能 | T1 溢出标志 | T1 启动位(TR1=1 启动) | T0 溢出标志 | T0 启动位(TR0=1 启动) | INT1 请求标志 | INT1 触发方式 | INT0 请求标志 | INT0 触发方式 |
(2)工作模式寄存器(TMOD,地址 89H,不可位寻址)
高 4 位控制定时器 1,低 4 位控制定时器 0,以定时器 0 为例:
| 位号 | B3 | B2 | B1 | B0 |
|------|-----|-----|-----|-----|
| 符号 | GATE | C/T | M1 | M0 |
| 功能 | 门控位(0 = 仅 TR0 控制启动) | 模式选择(0 = 定时器,1 = 计数器) | 工作模式配置 | 工作模式配置 |常用工作模式:
- 模式 1(16 位定时器):M1=0、M0=1,TH0(高 8 位)+TL0(低 8 位)共 16 位,最大计数值 65536;
- 模式 2(8 位自动重装载):M1=1、M0=0,TL0 计数,溢出后自动加载 TH0 的值,无需手动重置初值。
四、PWM 与蜂鸣器
1. PWM(脉冲宽度调制)
- 定义:通过数字信号的 “高电平时间占比” 控制模拟量的技术。
- 核心指标:
周期(T):PWM 信号一个高低电平循环的时间;
占空比(D):高电平时间 / 周期,范围 0%~100%(如 D=50% 表示高低电平各占一半时间)。 - 51 单片机实现:通过定时器中断翻转引脚电平,调整初值改变周期,调整高电平持续时间改变占空比。
2. 蜂鸣器控制
(1)蜂鸣器分类
- 有源蜂鸣器:内部含振荡电路,通直流电即可发声(频率固定);
- 无源蜂鸣器:无振荡电路,需输入 PWM 信号(高低电平交替)才能发声(频率可通过 PWM 调整)。
(2)软件实现(按键控制无源蜂鸣器频率)
3. 定时器初值计算(以 11.0592MHz 晶振、200Hz 为例)
- 计算机器周期:Tcy=12/11.0592MHz≈1.085μs;
- 计算 PWM 周期:200Hz 对应的周期 T=1/200=5ms=5000μs;
(定时器中断一次翻转电平,故中断周期为 T/2=2500μs); - 计算计数次数:N=2500μs/1.085μs≈2304;
- 计算初值:模式 1 最大计数值为 65536,故初值 = 65536 - 2304 = 63232(与定义的 HZ200=63231 接近,误差源于四舍五入)。