news 2026/4/18 1:02:03

【普中51单片机开发攻略--基于普中-2普中-3普中-4】-- 第 19 章 中断系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【普中51单片机开发攻略--基于普中-2普中-3普中-4】-- 第 19 章 中断系统

(1)实验平台:普中51单片机开发板-A2&A3&A4


在前面章节, 我们通过介绍 51 单片机 IO 口学习了很多相关的实验。 从最简单的 LED 到数码管动态扫描再到 LED 点阵以及电机控制, 无不体现学习 51 单片机 IO 口操作的重要性。 在前面章节, 我们还提到了学习 51 单片机的重点及难点主要有中断、 定时器、 串口等内容, 这部分内容大家一定要认真掌握, 这部分没有学好就不能说学会了51单片机。因此专门用一章来介绍51单片机的中断系统,为后面学习外部中断、 定时器中断、 串口中断做好铺垫。 本章分为如下几部分内容:

19.1 中断介绍

19.1.1 中断概念

19.2 中断结构及相关寄存器

19.2.1 中断结构

19.2.2 中断相关寄存器


19.1 中断介绍

19.1.1 中断概念

中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在, 很大程度上提高了单片机处理外部或内部事件的能力。 它也是单片机最重要的功能之一, 是我们学习单片机必须要掌握的。 很多初学者被困在中断中, 学了很久仍然不知道中断究竟是如何运作的。 千万不要认为它有多难,其实只要掌握正确的学习方法, 没有哪个知识点是学不会的。

为了能让大家更容易理解中断概念, 我们先来举一个生活事例: 你打开火,烧上一壶水。 然后去洗衣服, 在洗衣服的过程中, 突然听到水壶发出水开的报警声, 这时, 你停止洗衣服动作, 立即去关掉火, 然后将开水灌入暖水瓶中, 灌完开水后, 你又回去继续洗衣服。 这个过程中实际上就发生了一次中断。

对于单片机来讲, 中断是指 CPU 在处理某一事件 A 时, 发生了另一事件 B,请求 CPU 迅速去处理(中断发生); CPU 暂时停止当前的工作(中断响应), 转去处理事件 B(中断服务); 待 CPU 将事件 B 处理完毕后, 再回到原来事件 A 被中断的地方继续处理事件 A(中断返回), 这一过程称为中断。

再回来看前面讲的生活事例, 与单片机中断结合分析, 你的主任务是洗衣服,水开报警这是一个中断请求, 这一时刻相当于断点处, 你响应中断去关火, 然后将开水灌入暖水瓶中, 这一动作实际上就是处理中断程序, 灌完开水后再回去继续洗衣服, 相当于处理完中断程序后再返回主程序继续执行主程序。 这里需要注意的是, 水开是随时都有可能的, 但是无论什么时候开, 只要一开你将立即去处理它, 处理完后再回来继续接着洗刚才那件衣服。 单片机在执行程序时, 中断也随时有可能发生, 但无论何时发生, 只要一旦发生, 单片机将立即暂停当前程序,赶去处理中断程序, 处理完中断程序后再返回刚才暂停处接着执行原来的程序。

单片机在执行程序时其程序流程图如下:

引起 CPU 中断的根源称为中断源。 中断源向 CPU 提出中断请求, CPU 暂时中断原来的事务 A, 转去处理事件 B, 对事件 B 处理完毕后, 再回到原来被中断的地方(即断点), 称为中断返回。 实现上述中断功能的部件称为中断系统(中断机构)。

当中央处理机 CPU 正在处理某件事的时候外界发生了紧急事件请求, 要求CPU 暂停当前的工作, 转而去处理这个紧急事件, 处理完以后, 再回到原来被中断的地方, 继续原来的工作, 这样的过程称为中断。 实现这种功能的部件称为中断系统, 请示 CPU 中断的请求源称为中断源。 微型机的中断系统一般允许多个中断源, 当几个中断源同时向 CPU 请求中断, 要求为它服务的时候, 这就存在CPU 优先响应哪一个中断源请求的问题。 通常根据中断源的轻重缓急排队, 优先处理最紧急事件的中断请求源, 即规定每一个中断源有一个优先级别。 CPU 总是先响应优先级别最高的中断请求。

当 CPU 正在处理一个中断源请求的时候(执行相应的中断服务程序), 发生了另外一个优先级比它还高的中断源请求。 如果 CPU 能够暂停对原来中断源的服务程序, 转而去处理优先级更高的中断请求源, 处理完以后, 再回到原低级中断服务程序, 这样的过程称为中断嵌套。 这样的中断系统称为多级中断系统, 没有中断嵌套功能的中断系统称为单级中断系统。

中断的开启与关闭、 设置启用哪一个中断等都是由单片机内部的一些特殊功能寄存器来决定的, 在前面章节的学习中我们仅对单片机 IO 口操作过(实际上操作 IO 口即操作 IO 口寄存器, 只不过编译器已经帮我们把 IO 口寄存器封装好直接操作 IO 即可, 这些可在 51 单片机头文件内查看) , 从本章开始就会介绍单片机内部更多的特殊功能寄存器以及如何配置它实现相应的功能。

随着计算机技术的应用, 人们发现中断技术不仅解决了快速主机与慢速 I/O设备的数据传送问题, 而且还具有如下优点:

①分时操作。 CPU 可以分时为多个 I/O 设备服务, 提高了计算机的利用率;

②实时响应。 CPU 能够及时处理应用系统的随机事件, 系统的实时性大大增强;

③可靠性高。 CPU 具有处理设备故障及掉电等突发性事件能力, 从而使系统可靠性提高。

19.2 中断结构及相关寄存器

19.2.1 中断结构

STC89C5X 系列单片机提供了 8 个中断请求源, 它们分别是: 外部中断O(INTO)、 外部中断 1(INT1)、 外部中断 2(INT2)、 外部中断 3(INT3)、 定时器 0中断、 定时器 1 中断、 定时器 2 中断、 串口(UART)中断。 (注意: 51 系列单片机一定有基本的 5 个中断, 但不全有 8 个中断, 需要查看芯片手册, 通常我们使用的都是基本的 5 个中断: INT0、 INT1、 定时器 0/1, 串口中断) 。 所有的中断都具有四个中断优先级(基本型只有两个) 。 用户可以用关总中断允许位(EA/IE.7)或相应中断的允许位来屏蔽所有的中断请求, 也可以用打开相应的中断允许位来使 CPU 响应相应的中断申请。 其中有些中断源可以用软件独立地控制为开中断或关中断状态。 每一个中断的优先级别均可用软件设置。 高优先级的中断请求可以打断低优先级的中断, 反之, 低优先级的中断请求不可以打断高优先级及同优先级的中断。 当两个相同优先级的中断同时产生时, 将由查询次序来决定系统先响应哪个中断。 STC89C5X 系列单片机的各个中断查询次序表如下图所示:

通过设置新增加的特殊功能寄存器 IPH 中的相应位, 可将中断优先级设为四级, 如果只设置 IP 或 XICON, 那么中断优先级就只有两级, 与传统 8051 单片机两级中断优先级完全兼容。 上图中的中断查询次序即为中断号, 这个中断号在编程时非常重要, 当中断来临时, 只有中断号正确才能进入中断。

下面我们以 51 单片机均有的 5 个中断来介绍, 其内部结构框图如下所示:

①INT0 对应的是 P3.2 口的附加功能, 可由 IT0(TCON.0)选择其为低电平有效还是下降沿有效。 当 CPU 检测到 P3.2 引脚上出现有效的中断信号时, 中断标志 IE0(TCON.1)置 1, 向 CPU 申请中断。

②INT1 对应的是 P3.3 口的附加功能, 可由 IT1(TCON.2)选择其为低电平有效还是下降沿有效。 当 CPU 检测到 P3.3 引脚上出现有效的中断信号时, 中断标志 IE1(TCON.3)置 1,向 CPU 申请中断。

③T0 对应的是 P3.4 口的附加功能, TF0(TCON.5) ,片内定时/计数器 T0 溢出中断请求标志。 当定时/计数器 T0 发生溢出时, 置位 TF0, 并向 CPU 申请中断。

④T1 对应的是 P3.5 口的附加功能, TF1( TCON.7) , 片内定时/计数器 T1溢出中断请求标志。 当定时/计数器 T1 发生溢出时, 置位 TF1, 并向 CPU 申请中断。

⑤RXD 和 TXD 对应的是 P3.0 和 P3.1 口的附加功能, RI( SCON.0) 或 TI (SCON.1) , 串行口中断请求标志。 当串行口接收完一帧串行数据时置位 RI 或当串行口发送完一帧串行数据时置位 TI, 向 CPU 申请中断。

19.2.2 中断相关寄存器

(1) 中断允许控制

CPU 对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE 控制的。

EX0(IE.0), 外部中断 0 允许位;

ET0(IE.1), 定时/计数器 T0 中断允许位;

EX1(IE.2), 外部中断 0 允许位;

ET1(IE.3), 定时/计数器 T1 中断允许位;

ES(IE.4), 串行口中断允许位;

EA (IE.7), CPU 中断允许(总允许) 位。

(2) 中断请求标志 TCON

IT0(TCON.0) , 外部中断 0 触发方式控制位。

当 IT0=0 时, 为电平触发方式。

当 IT0=1 时, 为边沿触发方式(下降沿有效) 。

IE0(TCON.1) , 外部中断 0 中断请求标志位。

IT1(TCON.2) , 外部中断 1 触发方式控制位。

IE1(TCON.3) , 外部中断 1 中断请求标志位。

TF0(TCON.5) , 定时/计数器 T0 溢出中断请求标志位。

TF1(TCON.7) , 定时/计数器 T1 溢出中断请求标志位。

(3) 中断优先级

同一优先级中的中断申请不止一个时, 则有中断优先权排队问题。 同一优先级的中断优先权排队, 由中断系统硬件确定的自然优先级形成, 其排列如所示:

(4) 中断号

(5) 中断响应条件

①中断源有中断请求;

②此中断源的中断允许位为 1;

③CPU 开中断(即 EA=1) 。

以上三条同时满足时, CPU 才有可能响应中断。 在使用中断时我们需要做什么呢?

①你想使用的中断是哪个? 选择相应的中断号;

②你所希望的触发条件是什么? ③你希望在中断之后干什么?我们以外部中断 0 为例, 如下:

主程序中需要有以下代码:

EA=1; //打开总中断开关 EX0=1; //开外部中断 0 IT0=0/1; //设置外部中断的触发方式

中断服务函数:

void int0() interrupt 0 using 1 { //编写用户所需的功能代码 }

在中断函数中 int0 是函数名, 可自定义, 但必须符合 C 语言标识符定义规则, interrupt 是一个关键字, 表示 51 单片机中断。 后面的“0” 是中断号, 外部中断 0 中断号为 0, 这个可参考前面的内容。 后面的 using 1 可省略不写。

至此我们就把 51 单片机的中断简单介绍完, 如果大家还有不明白的可先暂时放下, 先通过实验掌握 51 单片机中断的使用方法, 对于理论方面的知识后续可以深入研究。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:04:18

Java AI开发:工程化与AI路由网关实践

在数字化转型浪潮中,Java企业面临新的挑战在数字化转型浪潮中,Java企业面临新的挑战:传统业务系统需融入AI能力以提升竞争力,但AI开发的不确定性与Java生态的稳定性需求常存在矛盾。无论是智能客服、知识库检索,还是数…

作者头像 李华
网站建设 2026/4/18 6:27:25

突破语言壁垒:让经典游戏开口说中文的秘密

突破语言壁垒:让经典游戏开口说中文的秘密 【免费下载链接】rpcs3 PS3 emulator/debugger 项目地址: https://gitcode.com/GitHub_Trending/rp/rpcs3 你是否曾在RPCS3模拟器中启动《最终幻想13》时,面对满屏日语菜单感到无所适从?是否…

作者头像 李华
网站建设 2026/4/18 9:43:02

模组管理难题如何破解?Scarab的技术实现与实战指南

模组管理难题如何破解?Scarab的技术实现与实战指南 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 问题发现:模组管理的五大核心痛点 识别传统安装流程…

作者头像 李华
网站建设 2026/4/18 8:55:47

conda环境已预置,BSHM镜像激活即用超方便

conda环境已预置,BSHM镜像激活即用超方便 你是否还在为部署人像抠图模型反复折腾环境而头疼?装CUDA版本不对、TensorFlow兼容性报错、模型加载失败、显卡驱动不匹配……这些“经典问题”是不是已经让你删了又装、装了又删好几轮?别再浪费时间…

作者头像 李华