当前位置: 首页 > news >正文

10天学会嵌入式技术之51单片机-day-4

 

第十二章 中断系统

中断系统是单片机用于处理外部紧急事件的一种机制。中断系统工作的大致流程如下
图所示:当 CPU 正在处理某项任务时,外部发生了某个紧急事件,此时 CPU 会暂停当前
的工作,转而去处理这个紧急事件,处理完之后,再回到原来被中断的位置,继续处理原
来的工作。

中断系统使单片机能够实时响应外部事件,提高了系统的灵活性和响应能力。
关于中断系统,我们先需要了解如下术语:

(1 )中断源

        中断源是指能够引发中断的事件。

(2)中断标志位

中断标志位用于标识某个中断是否发生,每个中断源都有一个与之对应的中断标志位。
当某个中断发生时,相应的中断标位就会置为 1,当 CPU 检测到标志位时,就会处理相应的中断。当中断处理完毕后,中断标志位需要复位(置 0),以便接收下一次中断,有些中
断源的标志位,会在 CPU 处理完中断后,自动复位,而有些则需要开发者手动复位,在使
用中断时,需要注意查看手册说明。

(3)中断服务程序

中断服务程序指处理中断的逻辑,当某个中断标志位置 1 时,CPU 会自动执行相应的
中断服务程序。

(4)中断优先级

中断优先级是指在多个中断同时发生时,单片机响应中断的先后顺序,并且高优先级
的中断可以打断低优先级的中断

12.2中断源

STC89C52RC 共有 8 个中断源,8 个中断源可分为 3 类,3 个类别分别是外部中断
时器中断
串口中断,下面简要介绍每种类型。

12.2.1外部中断

(4个:INT0,INT1,INT2,INT3)

外部中断是指由单片机外部的紧急事件触发的中断,通过向单片机的特定引脚发送特
定的信号触发。STC89C52RC 共提供了 4 个外部中断引脚,分别是 INT0,INT1,INT2,
INT3,如下图所示。

51 单片机的外部中断支持两种触发方式,分别是低电平触发下降沿触发

12.2.2 定时器中断

(3个:Timer0、Timer1、Timer2)

定时器中断是指由单片机内部的定时器触发的中断。
定时器是大多数单片机都具备的一个功能模块,用于实现定时任务。其用法是,设置
一个定时值,然后开始计时,待计时结束后,触发相应的定时器中断,开发者可以在中断
服务程序中编写定时任务的逻辑。

STC89C52RC 共有三个定时器,分别是 Timer0、Timer1、Timer2,每个定时器都有一
个相对应的中断。

12.2.3 串口中断

串口中断是由单片机串口触发的中断。

串口是单片机用于收发数据的重要接口之一,当单片机通过串口接收到数据或者发送
完数据后都会触发相应的中断。

STC89C52RC 的串口引脚为 TxD 和 RxD,其中 TxD 用于发送数据,RxD 用于接收数
据,如下图所示。

12.3 中断服务程序

中断服务程序是指用于处理中断的一段代码,当中断发生时,CPU 就会暂停当前程序
的执行,转而执行对应的中断服务程序,处理完中断后再恢复到原来的程序。
STC89C52RC 共有 8 个中断源,分为 4 个外部中断、3 个定时器中断和 1 个串口中断,
开发者可以为每个中断源声明相应的中断服务程序,中断服务程序的声明语法如下。

12.4 中断优先级

STC89C52RC 共有四个中断优先级,每个中断源都可以单独设置优先级。若多个中断
同时发生,优先级高的会被优先处理;若两个中断的优先级相同,则根据其中断号决定处
理顺序,中断号越小越优先。

除此之外,高优先级的中断还可以打断低优先级的中断,也就是说当 CPU 正在处理一
个中断时,又发生了另外一个优先级比它还高的中断,此时 CPU 会暂停原来中断的服务程
序,转而去处理这个高优先级的中断,处理完之后,再回到原来低优先级的中断服务程序。
这个机制叫做中断嵌套,STC89C52RC 支持两级中断嵌套。

第 13 章 外部中断——按键控制 LED 亮灭

13.1 需求描述

使用外部中断的方式,通过 SW3 按键控制 LED1 的亮灭

13.2 硬件设计

若想通过外部中断的方式检测按钮,必须将按钮接入 4 个外部中断引脚之一,如下图
所示,可以看到 SW3 可用于触发外部中断 0。

13.3 外部中断使用说明

STC89C52RC 的外部中断需要进行如下配置才可使用。

13.3.1 启用中断

默认情况,CPU 会屏蔽所有中断请求,也就是说 CPU 不会响应任何中断请求,要使用
中断,必须先进行启用。

每个中断源是否被启用,是由单片机内部的两个寄存器控制的,这两个寄存器分别是
IE(Interrupt Enable,中断允许)寄存器和 XICON(Auxiliary Interrupt Control,辅助中断
控制)寄存器。

两个寄存器的具体结构如下。

两个寄存器各有 8 位,每位的作用可参考下图(STC89C52 系列中断系统结构图)。

从上图可以看出,STC89C52 系列的中断系统具有两级控制,首先是 EA 总控制位,其
次是每个中断源各自的控制位。因此若需要启用某个中断,需要先将总控制位 EA 置位 1,
再将该中断自身的控制为置为 1。

13.3.2配置外部中断触发方式

STC89C52 系列的外部中断支持两种触发方式,分别是低电平触发和下降沿触发,4 个
外部中断各需要 1 个控制位用于设置触发方式,这 4 个控制位分布于如下两个寄存器中,
分别是 XICON(Auxiliary Interrupt Control,辅助中断控制)寄存器中、TCON(Timer 0
and 1 Control)寄存器,如下图所示。

4 个控制位的具体作用可参考下图(STC89C52 系列中断系统结构图)。

从上图可以看出 IT0~IT3 分别用于设置外部中断 0 到 3 的触发方式,且 0 表低电平触
发,1 表示下降沿触发。

13.3.3 配置中断优先级(可选)

STC89C52 系列的中断系统支持四个优先级,所以每个中断源的优先级都需要通过 2
个控制位进行配置,8 个中断源共需要 16 个控制位,这 16 个控制位分布在如下 3 个寄存器
中,分别是 IPH(Interrupt Priority High,中断优先级高位)寄存器,IP(Interrupt Priority
Low,中断优先级低位)寄存器,XICON(Auxiliary Interrupt Control,辅助中断控制)寄
存器。

三个寄存器的具体结构如下。

13.3.4 定义中断服务程序

外部中断 0 到外部中断 3 的中断号分别是:0、2、6、7,以外部中断 0 为例,其中断
服务程序应定义为

void INT0_Handler() interrupt 0
{
}

13.4 软件设计

13.4.1 实现思路

(1)启用外部中断 0

// 打开中断总开关
EA = 1;
// 打开外部中断 0 开关
EX0 = 1

(2)配置外部中断 0 的触发方式

当前案例选择下降沿触发更为合理,因为选择低电平触发会导致按键按下时,外部中
断一直被重复触发。

// 配置外部中断为下降沿触发
IT0 = 1;

(3)配置中断优先级

当前程序只有一个,优先级可省略不配。

(4)中断服务程序

完成上述配置后,需要根据需求定义中断服务程序,当前需求相对比较简单,中断服
务程序如下。

void INT0_Func() interrupt 0
{// 中断中打开 LED0LED0 = ~LED0;
}

13.4.2 完整代码

#include <STC89C5xRC.H> //包含 STC89C52 的头文件
#define LED0 P00
void Init_INT0()
{// 打开中断总开关EA = 1;// 打开外部中断 0 开关EX0 = 1;// 配置外部中断为下降沿触发IT0 = 1;
}
void main()
{Init_INT0();while (1);
}
/**
* @brief 中断函数中打开 LED0,代表当触发中断时,LED0 会打开。
* 根据我们之前的设置,当按下 SW3 时,P32 为低电平,此时 LED0 打开。
*
* interrupt 0 表示 0 号中断触发时执行该函数的逻辑
* 如果用 C 语言编程,中断查询次序就是中断号
*/
void INT0_Func() interrupt 0
{// 中断中打开 LED0LED0 = ~LED0;
}

相关文章:

  • C# .NET如何自动实现依赖注入(DI)
  • 【前端样式】用 aspect-ratio 实现等比容器:视频封面与图片占位的终极解决方案
  • 【消息队列RocketMQ】二、RocketMQ 消息发送与消费:原理与实践
  • 【AI】SpringAI 第三弹:接入通用大模型平台
  • Docker 镜像、容器和 Docker Compose的区别
  • 制作一款打飞机游戏15:动画优化
  • ArcGIS、ArcMap查看.shp文件时属性表中文乱码
  • Python-24:小R的随机播放顺序
  • [特殊字符] Prompt如何驱动大模型对本地文件实现自主变更:Cline技术深度解析
  • 【Easylive】AdminFilter 详细解析
  • postman乘法计算,变量赋值
  • 实验五 LCD1602 显示字符串
  • Craft 是什么:腾讯 Cloud Studio 中的 CodeBuddy 提供了 Craft 功能
  • 深入解析 Spring 中的 @Value 注解(含源码级剖析 + 自定义实现)
  • 工具:下载vscode .vsix扩展文件及安装的方法
  • 关于敏感文件或备份 安全配置错误 禁止通过 URL 访问 Vue 项目打包后的 .gz 压缩文件
  • 网络结构及安全科普
  • 机器学习-08-推荐算法-协同过滤
  • SQL问题分析与诊断(8)——分析方法2
  • 常用 SQL 转义符的总结
  • 青海玉树州杂多县发生4.6级地震,震源深度10千米
  • 官方披露:定西民政局原局长将收受烟酒高价“倒卖”给单位,用于违规接待
  • 中物联声明:反对美对华物流、海事和造船领域301调查措施
  • 中国船协发布关于美对华造船业实施限制措施的严正声明
  • 一代油画家的“色彩之诗”:周碧初捐赠艺术展上海举行
  • “85后”雷海军已任新疆维吾尔自治区统计局局长