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

香橙派5Max + Realsense D435i + Fast-Drone-250:手把手教你搭建一个完整的无人机视觉开发环境

本文详细介绍了如何利用香橙派5Max、Realsense D435i深度相机和Fast-Drone-250项目搭建完整的无人机视觉开发环境。从硬件连接到ROS配置,再到项目部署与性能优化,提供全栈式实战指南,助力开发者快速实现SLAM算法验证和自主导航功能开发。

weixin_30879169的博客 464

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

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

2301_80748708的博客 2211

底层软件测试规范,QA评审底层测试

本文首发于【林子的空间】“林子,咱们上次讨论的高效Desk check清单,用起来还挺好的,最近我们组每次Desk check变得顺利多了,Dev也是越来越熟练。”玥玥跟我说。“真好!我们组感觉也是这样!”“不过,我听小慧说他们组有人对QA review UT提出了一些concern(质疑),觉得QA review的价值不大,基本都是Dev给讲一遍,QA也提不出来什么反馈...”玥玥补充说道。“哦...

weixin_42144707的博客 1188

esp32s3 spi camera gc6133调试

gc6133 spi只有master模式,同时需要esp32提供主时钟,需要有主时钟然后才能通过i2c进行初始化.测试了几种方式,记录如下。

hclydao的专栏 1565

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

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

2301_80748708的博客 1339

Apollo&Carla联合仿真环境搭建与实战调试

本文详细介绍了Apollo与Carla联合仿真环境的搭建与实战调试流程,涵盖硬件配置、软件依赖安装、Apollo环境配置、Carla仿真器安装、桥接服务设置以及常见问题解决方案。通过逐步指导,帮助开发者高效实现自动驾驶仿真测试,提升开发效率。

ee345的博客 200

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

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

2301_80748708的博客 1393

Quanto option期权公式推导(更新中)

Quanto期权不同于以标的股票或资产的计价货币支付最终收益的普通欧式期权,它以另一种货币以预先确定的汇率支付最后的收益。以股票B的计价货币来计价的quanto看涨期权的收益为F0×max⁡(Sa(T)−K,0)×Sb(T)F_0 \times \max(S_a(T)-K, 0) \times S_b(T)F0​×max(Sa​(T)−K,0)×Sb​(T) 其中SaS_aSa​以货币A计价,SbS_bSb​以货币B计价,F0F_0F0​是预先固定的汇率. 假设上述股票均遵循几何布朗运动,可以得到以下恒等式

qq_41782124的博客 3684

水文仿真软件:HEC-RAS (Hydrologic Engineering Center‘s River Analysis System)_(7).一维非稳态水力模型

自定义脚本是通过编程语言(如 Python)编写的一系列自动化任务,可以帮助用户更高效地处理数据和运行模型。编写脚本:使用 Python 或其他编程语言编写自定义脚本。集成脚本:将脚本集成到 HEC-RAS 中,实现自动化数据处理和模型运行。

kkchenjj的博客 933

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

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

2301_80748708的博客 1049

C#的GDI+绘图详解

/消除锯齿 或 AntiAlias。// 1.在窗体或控件的Paint事件中,用PaintEventArgs e 创建绘图对象 ---- 控件或窗体重绘时。//为控件创建绘图对象。//--------------------以上方法三选一。//2.创建绘图对象 panel1中绘图。

weixin_50920631的博客 3457

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

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

2301_80748708的博客 2477

小众但实用:Python爬取钉钉/企业微信消息,实现办公数据自动化采集(完整版)

钉钉/企业微信的办公数据自动化采集,属于「小众但极度实用」的Python技巧——它不像爬虫爬取电商/网页数据那样被广泛关注,但能直接解决职场人的「刚需痛点」,把每天1-2小时的手动数据整理工作,变成「一键自动化完成」。这套技巧的核心价值,不在于「技术有多高深」,而在于「能真正落地、能真正提升效率」—— 几行简单的Python代码,就能解放双手,让你从繁琐的重复工作中解脱出来,专注于更有价值的核心工作。更重要的是:所有的技术和代码,都是基于「合规合法」的前提,守住了技术的底线,也守住了职场的原则。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1931

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

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

2301_80748708的博客 705

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

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

zx18831955136的博客 1828

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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、付费专栏及课程。

余额充值