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

嵌入式软件--51单片机 DAY 3 按键的作用相当于一个开关,按下时接通(或断开),松开后断开(或接通)。 阅读详情

 

第十二章 中断系统

中断系统是单片机用于处理外部紧急事件的一种机制。中断系统工作的大致流程如下
图所示:当 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
{
    // 中断中打开 LED0
    LED0 = ~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
{
    // 中断中打开 LED0
    LED0 = ~LED0;
}

day01 51单片机 目前使用的51单片机一般是宏晶STC89系列,这其中流传最广的版本,也是我们课程的主角,就是STC89C52RC。 阅读详情

相关推荐

【25年】51单片机从零开始入门 Day1—51单片机基础知识与工程创建

【时间】:2025年10月11日【工具】:淘宝上买的普中51单片机开发板 A2标配,69.5元 == 我发现这个是STC89C52RC,注意这个RC,所以后面选配置的记得选RC的!!!!【个人情况】:本科软件工程、研究生计算机技术,本科学过C,了解一点,研究生没用,忘得差不多了,就记得通用知识学习资料:看B站上 江协科技 视频 + 买单片机送课程,他的课B站上也有,太啰嗦了,感觉送的PDF可以。优快云博主:Zevalin爱灰灰 他发的资料也很有用。

Claire的博客 1240

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

手把手入行嵌入式之10天学会51单片机day-1

2301_80748708的博客 1332

AD56XXR系列DAC驱动设计:SPI接口、寄存器配置与嵌入式工程实践

数模转换器(DAC)是嵌入式系统实现高精度模拟控制的核心器件,其性能取决于通信协议可靠性、寄存器配置准确性及硬件协同设计能力。基于SPI总线的电压输出型DAC广泛应用于工业控制、光模块偏置、传感器校准等场景,需兼顾静态精度、动态响应与低功耗特性。AD56XXR系列作为典型集成内部基准与多通道同步更新能力的12/14/16位DAC,支持轨到轨输出与灵活掉电模式,为资源受限MCU提供可移植固件范式。本文围绕SPI时序约束、16位指令字解析、LDAC同步机制及精度补偿策略展开,覆盖从硬件连接、初始化流程到量产级可

weixin_33481022的博客 611

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

手把手入行嵌入式之10天学会51单片机day-8

2301_80748708的博客 2211

史上最全的Logisim运算器实验教程(基于华中科技大学计算机组成原理实验)

本博客是实现了Logisim的运算器设计,有具体的运算器设计的思路和运算器设计的电路,适合一步一步的按照思路做。

qq_62325622的博客 4万+

基于STM32的多普勒雷达测速

基于多普勒雷达传感器,以STM32单片机为主控芯片,根据不同模块检测距离的不同,使用不同多普勒雷达传感器实现对远近距离车辆行驶速度及方向的测量。 1、基础知识 无线电探测和测距,是用无线电(电磁波)方法发现目标并测定其空间位置的装置。随着雷达技术的发展,现代雷达不仅可以对目标进行定位,还可以测量目标的速度、对目标进行成像甚至测量目标的大小和材料特性。所有利用雷达波来检测物体速度的原理,其理论基础皆源自于“多普勒效应”,...

weixin_52801934的博客 6315

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

手把手入行嵌入式之10天学会51单片机day-7

2301_80748708的博客 1339

米哈游 AI产品经理面试题精选:10道高频考题+答案解析(附PDF)

米哈游是全球知名游戏开发商,以《原神》《崩坏》系列著称,专注二次元文化与AI技术创新。本文整理了10道AI产品经理面试题,涵盖Transformer架构、智能NPC设计、机器学习应用、AIGC产品规划等核心领域。题目既考察技术理解(如RAG原理、多模态模型),又关注产品落地(游戏平衡性优化、伦理安全),同时强调跨团队协作能力。参考答案均结合米哈游业务场景,体现技术驱动与玩家体验并重的产品思维,展现AI在游戏行业的创新应用前景。

ZHHHHH15的博客 682

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

手把手入行嵌入式之10天学会51单片机day-3

2301_80748708的博客 1393

华为S7700交换机Console密码重置全流程详解

本文详细解析了华为S7700交换机Console密码丢失后的重置全流程。通过进入BootROM菜单清除密码,并涵盖单/双主控场景操作、必备工具连接、常见问题排查及重置后的安全配置建议,帮助网络工程师掌握核心交换机的关键应急恢复技能,确保运维安全。

resnet7explorer的博客 540

大厂面试级C#上位机完整项目(终极版):工业级Modbus协议封装 + 标准多线程采集 + 全链路异常处理

(Modbus统一通信接口)、(采集服务接口)职责:定义所有核心操作的标准接口,屏蔽底层差异(RTU/TCP、串口/TCP),面向接口编程的核心体现。新增协议/采集方式,只需实现接口,核心代码零改动。/// 自定义Modbus通信异常类 - 大厂标准,区分通信异常和其他异常/// 包含异常信息+内部异常,可溯源完整错误堆栈,面试必写本次项目是对标大厂工控上位机岗位的终极版实战项目,所有代码、架构、设计都遵循大厂标准,覆盖了面试官考察的所有核心考点✅ 纯手写Modbus协议,体现你对协议底层的吃透。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 858

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

手把手入行嵌入式之10天学会51单片机-day5

2301_80748708的博客 1049

安装 miniconda linux

安装 miniconda linux

jacke121的专栏 1万+

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

手把手入行嵌入式之10天学会51单片机day-10

2301_80748708的博客 2477

数据分析必问:Pandas面试题及参考答案

DataFrame是Pandas库中的一个核心数据结构,它类似于Excel中的表格,可以存储不同类型的数据。在Pandas中,抽样操作通常很简单,但是需要根据数据的特点和分析的需求来选择合适的抽样方法。数据标准化和归一化是数据预处理中常用的技术,目的是将数据调整到一个合适的范围内,以消除不同特征量纲和数值范围的差异,从而保证模型训练的有效性。CSV文件是一种文本文件,其中的数据以逗号分隔。不平衡数据集指的是数据集中各类别样本的数量差异较大的情况,这可能导致模型训练出现偏差,影响模型的泛化能力。

大模型大数据攻城狮的专栏 3009

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

手把手入行嵌入式之10天学会51单片机day-2

2301_80748708的博客 705

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

嵌入式软件--51单片机 DAY 4

外部中断0到外部中断3的中断号分别是:0、2、6、7,以外部中断0为例,其中断服务程序应定义为void()interrupt1//编写定时任务逻辑4.软件设计//重新状态脉冲计数器//统计中断次数count = 0;

zx18831955136的博客 1828

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

STM32单片机和51单片机有何区别?

单片微型计算机简称单片机,简单来说就是集CPU(运算、控制)、RAM(数据存储-内存)、ROM(程序存储)、输入输出设备(串口、并口等)和中断系统处于同一芯片的器件。 在我们自己的个人电脑中,CPU、RAM、ROM、I/O这些都是单独的芯片,然后这些芯片被安装在一个主板上,这样就构成了我们的PC主板,进而组装成电脑。而单片机将这些都集中在了一个芯片上。 一 51单片机 应用最广泛的8位单片机,当然也是初学者们最容易上手学习的单片机。最早由Intel推出,...

8973

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

手把手入行嵌入式之10天学会51单片机day-6

2301_80748708的博客 707

嵌入式—51单片机day1

嵌入式:以应用为中心,以计算机技术为基础,软硬件可裁剪的专用计算机系统。

2301_77373031的博客 644

嵌入式—51单片机day2

通用输入输出,是与外界交互最基本的形式,可以独立的将 引脚配置为输入模式/输出模式输出模式:控制引脚输出高电平低电平(给定控制信号)开漏输出推挽输出复用开漏复用推挽输入模式:检测引脚的电平(接收外部信号)上拉输入下拉输入浮空输入模拟输入独立按键原理图工作原理:当按键未被按下时,引脚会呈现高电平,当按键被按下时,会造成引脚和GND短路到一起,此时对应的引脚会呈现低电平。判断按键是否被按下,只需要判断引脚是否为低电平即可中断概念当CPU。

2301_77373031的博客 898

自学嵌入式 day40 51单片机

51单片机、MCU、CPU、MPU、位运算、keil程序编写流程

2301_81142331的博客 1366

【C51】:基于51单片机的多功能时钟设计

#????基于51单片机的时钟设计 此文章为某年某月某次单片机作业 首先:再keil上写下代码,用protues调试(不懂得百度搜索“keil与protues联机调试”) 这次没有使用38译码器,直接将数码管引脚全部放在单片机上 不多说,上代码和图: 代码如下 #include<reg51.h> #define uChar unsigned char #define uInt unsign...

傅里叶也头大 6336

自学嵌入式day44,51单片机

嵌入式系统是一种以应用为中心、以计算机技术为基础的专用计算机系统,其软硬件可根据具体需求进行裁剪。针对性强:针对特定应用场景设计,如工业控制、家电控制等。可定制化:支持软硬件模块化配置,以适应不同性能要求。

m0_62148706的博客 573

嵌入式软件--51单片机 DAY 2

我们可以通过阴极控制显示的位置,通过阳极控制显示的内容。两个数码管共有8个阴极引脚和16和阳极引脚,如果所有引脚都直接接入MCU,会造成MCU引脚的极大浪费。为了节省MCU的引脚,我们可以将两个数码管的阳极接在一起。如此我们就有了8个阴极,8个阳极16个引脚。我们只需通过8个GPIO引脚就能控制这8位数码管的显示内容了。既然是八位,我们很快想到了38译码器,通过三位二进制数字的输入控制八种结果。

zx18831955136的博客 1919

51单片机学习笔记——第4天:LCD1602显示矩阵键盘键值(普中51中级实验例程)

本实验核心功能是将矩阵键盘按键的值读出,然后显示在LCD1602上。 代码实现上,先定义了一个数组,里面存放了0-F共16个字符,当检测到矩阵键盘有按键按下,则将读到的键值显示在LCD1602上。

Super辉sir的博客 1万+
上一篇: 10天学会嵌入式技术之51单片机-day-3
下一篇: 10天学会嵌入式技术之51单片机-day-5
昊昊昊昊昊明
博客等级 码龄3年 285粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值