【51单片机系列】中断优先级介绍及使用
文章来源:《51单片机原理及应用(第3版)》5.4节。
51单片机采用了自然优先级和人工设置高、低优先级的策略。
当CPU处理低优先级中断,又发生更高级中断时,此时中断处理过程如下图所示。
一个正在执行的低优先级中断服务程序能被高优先级中断源的中断申请所中断,形成中断嵌套。
相同级别的中断源不能相互中断其服务程序,也不能被另一个低优先级的中断源所中断。
如果CPU正在执行高优先级的中断服务子程序,不能被任何中断源所中断。

上电时,中断优先级寄存器IP被清零,每个中断源都处于同一个优先级,这时如果其中几个中断同时产生中断请求,则CPU按照片内硬件优先级链路的顺序即自然优先级响应中断,硬件优先级有高到低的顺序如下表所示:
| 中断源 | 默认中断级别 | 中断号 |
|---|---|---|
| 外部中断0——INT0 | 最高 | 0 |
| 定时/计数器0中断——T0 | 第2 | 1 |
| 外部中断1——INT1 | 第3 | 2 |
| 定时/计数器1中断——T1 | 第4 | 3 |
| 串口中断——TI/RI | 第5 | 4 |
| 定时/计数器2中断——INT2(52独有) | 第6 | 5 |
如果希望某个中断源有更高的优先级,可以通过设置中断优先级寄存器IP指定更高优先级的中断。IP各位如下表:
| 位序 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| 位名称 | / | / | / | PS | PT1 | PX1 | PT0 | PX0 |
IP中的某位设置为,则相应的中断就是高优先级;否则就是低优先级;在同一个优先级下,中断响应的顺序和自然优先一样。IP可位寻址。
各个位说明:
PS:串口中断优先级控制位PT1:定时器1优先级控制位PX1:外部中断1优先级控制位PT0:定时器0优先级控制位PX0:外部中断0优先级控制位
比如要求将外部中断1,定时器0设为高优先级,其它为低优先级,那么应该置PT0=1,PX1=1,高三位取任意值,设置为0,那么IP的值应该为00000110B=06H,此时如果5个中断同时发生,中断响应的次序为:定时器0中断→外部中断1→外部中断0→定时器1→串口中断。
中断优先级应用示例
设置外部中断1为高优先级,在两个外部中断引脚(P3.2和P3.3)接两个按键,P1口连接LED。连接P3.2口的按键按下后,LED循环点亮;连接P3.3口的按键按下后,LED全部点亮-熄灭,连续3次。
Proteus设计原理电路图如下:

软件设计
源程序清单:
/*实现功能:中断优先级使用示例,设置外部中断1为高优先级,P1口连接LED,P3.2和P3.3分别连接两个按键连接P3.2的按键INT0按下后LED循环点亮,连接P3.3的按键INT1按下后LED全部点亮-熄灭,闪烁3次。通过先按下按键INT0,然后再按下按键INT1可以看到LED依次点亮-全部点亮熄灭闪烁3次-依次点亮,直观显示中断优先级的作用。[2024-01-31] zoya
*/#include <reg51.h>
#include <intrins.h>typedef unsigned char uchar;#define GPIO_LED P1void delay(uchar c)
{uchar i,j;for(;c>0;c--){for(i=0;i<142;i++)for(j=0;j<2;j++);}
}void main()
{EX0=1; // 外部中断0允许位EX1=1; // 外部中断1允许位IT0=1; // 定时器0允许位IT1=1; // 定时器1允许位EA=1; // 总中断允许位IP=0x04; // 中断优先级设置,外部中断1高优先级GPIO_LED=0xff;while(1);
}void Int0() interrupt 0
{uchar i, tmp;EX0=0; // 关闭外部中断0,防止执行过程中再次发生中断delay(20);EX0=1; // 开外部中断0while(1){tmp=0xFE;GPIO_LED=tmp;for(i=0;i<8;i++){tmp=_crol_(tmp,1);delay(100);GPIO_LED=tmp;}}
}void Int1() interrupt 2
{EX1=0; // 关闭外部中断1,防止执行过程中再次发生中断delay(20);EX1=1; // 开外部中断1GPIO_LED=0x00; delay(100);GPIO_LED=0xff; delay(100);GPIO_LED=0x00; delay(100);GPIO_LED=0xff; delay(100);GPIO_LED=0x00; delay(100);GPIO_LED=0xff; delay(100);
}
仿真结果:

相关文章:
【51单片机系列】中断优先级介绍及使用
文章来源:《51单片机原理及应用(第3版)》5.4节。 51单片机采用了自然优先级和人工设置高、低优先级的策略。 当CPU处理低优先级中断,又发生更高级中断时,此时中断处理过程如下图所示。 一个正在执行的低优先级中断服…...
.net core 6 集成 elasticsearch 并 使用分词器
1、nuget包安装NEST、安装elasticsearch、kibana、ik分词器、拼音分词器 2、创建操作对象 //索引库 static string indexName "testparticper"; //es 操作对象 ElasticClient elasticClient new ElasticClient(new ConnectionSettings(new Uri("http://192.…...
Unity项目从built-in升级到URP(包含早期版本和2023版本)
unity不同版本的升级URP的方式不一样,但是大体流程是相似的 首先是加载URP包 Windows -> package manager,在unity registry中找到Universal RP 2023版本: 更早的版本: 创建URP资源和渲染器 有些版本在加载时会自动创建&#…...
2月4号作业
编写程序实现二叉树的创建,三种遍历自己销毁 #include <myhead.h>#define TRUE 1 #define FALSE 0 #define OVERFLOW -2 #define OK 1 #define ERROR 0#define INIT_SIZE 20 #define INCREMENT_SIZE 5typedef int Status; typedef int TElemType; //存储结构…...
瑞_23种设计模式_建造者模式
文章目录 1 建造者模式(Builder Pattern)1.1 介绍1.2 概述1.3 创作者模式的结构 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 模式拓展 ★★★4.1 重构前4.2 重构后 5 总结5.1 建造者模式优缺点5.2 建造者模式使用场景5.3 建造者模式 …...
GA/T 1707-2019 防爆安全门检测
防爆安全门是指能抵抗爆炸冲击波作用的特种防护门,根据防爆门的防爆性能的不同,分为非接触爆炸防爆门和防接触爆炸防爆门,根据防爆能力的不同,分为不同等级。 GA/T 1707-2019 防爆安全门检测项目 测试项目 测试标准 外观质量 …...
k8s学习-数据管理
在Docker中我们知道,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中,常用的手段就是Volume数据卷。在K8S中,也提供了存储模型Volume&…...
java hutool工具类实现将数据下载到excel
通过hutool工具类,对于excel的操作变得非常简单,上篇介绍的是excel的上传,对excel的操作,核心代码只有一行。本篇的excel的下载,核心数据也不超过两行,简洁方便,特别适合当下的低代码操作。 下载…...
【C/Python】Gtk部件ListStore的使用
一、C语言 在GTK中,Gtk.ListStore是一个实现了Gtk.TreeModel接口的存储模型,用于在如Gtk.TreeView这样的控件中存储数据。以下是一个简单的使用Gtk.ListStore的C语言示例,该示例创建了一个列表,并在图形界面中显示: …...
Swift 入门之自定义类型的模式匹配(Pattern Matching)
概览 小伙伴们都知道 Swift 是一门简洁、类型安全、极富表现力以及“性感迷人”的编程语言。 和大多数语言一样,在 Swift 中也有一些隐藏着的、不为人知的宝藏特性。利用它们我们可以极大增加撸码的愉悦和成就感。 其中,模式匹配(Pattern …...
MySQL-----DML基础操作
DML语句 DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。 ▶ 添加数据(INSERT) 【语法】 1. 给指定字段添加数据 INSERTO 表名 (字段名1,字段名2,...) VALUES (值1,值2,...); 2.给全…...
提前祝大家新年好!来看看社区 2023 都得了哪些奖吧
大噶好!转眼马上就是“龙”历新年啦,不知道大家这周的工作热情怎么样呢?小陈的心已经在殷切期盼回家过年了~ RTE 开发者社区预祝诸位: 2024 年 🐲龙年添财气,万事皆胜意! 回顾过去…...
Redis核心技术与实战【学习笔记】 - 19.Pika:基于SSD实现大容量“Redis”
前言 随着业务数据的增加(比如电商业务中,随着用户规模和商品数量的增加),就需要 Redis 能保存更多的数据。你可能会想到使用 Redis 切片集群,把数据分散保存到不同的实例上。但是这样做的话,如果要保存的…...
qt-C++笔记之contains()和isEmpty()函数、以及部分其他函数列举
qt-C笔记之contains()和isEmpty()函数、以及部分其他函数列举 code review! 文章目录 qt-C笔记之contains()和isEmpty()函数、以及部分其他函数列举contains()isEmpty() 类似的其他函数列举通用容器类函数字符串特有函数 在Qt C开发中, contains() 和 isEmpty()…...
极速搭建幻兽帕鲁私服,叫上好友春节假期一起联机畅玩帕鲁
文章目录 前言幻兽帕鲁私服详细部署教程查看服务器开始游戏自定义游戏参数配置 前言 行业资讯 《幻兽帕鲁》的火爆对开发商 Pocketpair 来说,代价是巨大的。该游戏的成功让首席执行官沟部拓郎最近在推特上表示,他可能因服务器运营费用而面临破产。据他透…...
MagicVideo-V2:多阶段高保真视频生成框架
本项工作介绍了MagicVideo-V2,将文本到图像模型、视频运动生成器、参考图像embedding模块和帧内插模块集成到端到端的视频生成流程中。由于这些架构设计的好处,MagicVideo-V2能够生成具有极高保真度和流畅度的美观高分辨率视频。通过大规模用户评估&…...
【三】【C++】类与对象(二)
类的六个默认成员函数 在C中,有六个默认成员函数,它们是编译器在需要的情况下自动生成的成员函数,如果你不显式地定义它们,编译器会自动提供默认实现。这些默认成员函数包括: 默认构造函数 (Default Constructor)&…...
ffmpeg 输入文件,输入出udp-ts 指定pid
要使用FFmpeg将输入文件转换为UDP传输流(TS)并指定特定的PID,您可以使用以下命令: ffmpeg -i input_file -c:v libx264 -preset ultrafast -tune zerolatency -f mpegts -map 0:v:0 -map 0:a:0 -pid 0x12345678 udp://output_addr…...
自研人工智能小工具-小蜜蜂(国外ChatGpt的平替)
国内有非常多好用的人工智能工具,但均无法完全替代国外ChatGpt。 ChatGPT相较于其他国内工具的优势在于以下几点: 创新的语言生成能力:ChatGPT是由OpenAI开发的先进的自然语言生成模型,它采用了大规模的预训练和精细调整方法。因此…...
Stable Diffusion 模型下载:ReV Animated
模型介绍 该模型能够创建 2.5D 类图像生成。此模型是检查点合并,这意味着它是其他模型的产物,以创建从原始模型派生的产品。 条目内容类型大模型基础模型SD 1.5来源CIVITAI作者s6yx文件名称revAnimated_v122EOL.safetensors文件大小5.13GB 生成案例 …...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...
