单片机中断系统的应用

news2025/1/19 17:04:11

中断系统是单片机中非常重要的组成部分,它是为了使单片机能够对外部或内部随机发生的事件实时处理而设置的。中断功能的存在,在很大程度上提高了单片机实时处理能力,它也是单片机最重要的功能之一,是我们学习单片机必须掌握的重要内容。我们不但要了解单片机中断系统的资源配置情况,还要掌握通过相关的特殊功能寄存器打开和关闭中断源、设定中断优先级,掌握中断服务程序的编写方法。

目录

一、中断的概念

1.单片机的输入/输出方式

2.中断的概念

二、MCS-51单片机的中断系统

1.中断源(5个)

2.中断标志

3.中断允计寄存器IE

4.中断优先级寄存器IP

5.中断初始化及中断服务程序结构

一、中断的概念

为了弄懂中断的概念,下面我们先来了解一下单片机与外设之间数据的输入/输出方式。

1.单片机的输入/输出方式

CPU与外设之间的信息交换称为输入/输出。在一个单片机系统中,输入/输出是必不可少的,CPU与外设之间以何种方式进行信息交换,将直接影响到信息交换的可靠性和CPU的效率。

例如:在一个与打印机相连的微机系统中,CPU将需要打印的数据输出给打印机,打印机接收到数据后便可进行打印。CPU是如何将要打印的数据输出给打印机的呢?如果打印机总是处于准备好的状态或者CPU总是知道打印机的状态,那么CPU无需查询打印机状态可直接进行输出,这种方式称为无条件传送方式。但外设的执行速度一般是很慢的,像打印机这样的外设不可能总处于准备好的状态,因此CPU在输出数据前需要先查询打印机是否空闲,若空闲则进行输出操作,若打印机处于忙状态则继续查询,直到打印机处于空闲状态再进行输出。这种方式称为查询传送方式。与无条件传送方式相比,虽然查询传送方式能有效地与慢速外设进行信息交换,提高了信息交换的可靠性,解决了外设与CPU速度不匹配的矛盾,但由于在外设未准备好的情况下,CPU需要不断的查询外设状态,不能进行其他操作,这样就浪费了CPU的资源,使CPU的利用率大大降低。为了提高CPU的工作效率,可将外设的“忙/闲”状态信息作为请求触发信号,这样,CPU就可以做自己的工作,当打印机处理完上一批数据后处于空闲状态时,向CPU提出中断请求信号,CPU接到中断请求时,就暂停当前正在进行的工作转去为打印机输出数据,输出一批数据后又返回到刚才中断的地方继续进行原来的工作,这种方式称为中断传送方式。

综上所述,CPU与外设之间信息交换有三种方式,其执行过程如图5-1所示。

图5-1 输入/输出方式示意图

(1)无条件传送方式   这种方式的特点是:数据的传送取决于程序执行输入/输出指令,而与外设的状态无关。它适合于与CPU同步的快速设备或状态已知的外设,软、硬件系统简单。

(2)查询传送方式   查询方式是一种条件传送。在传送数据前,首先读取外设状态信息,并加以测试判断,若外设“准备就绪”,则CPU与外设进行数据交换,若外设处于“忙”状态,则CPU不与外设交换数据,并继续查询外设状态。其特点是:在硬件上不仅要考虑数据信息的传递,而且还要考虑状态信息的输入;在查询过程中CPU的利用率不高,适用于实时性能要求不高的场合。

(3)中断传送方式  中断方式也是一种条件传送。CPU可以与外设同时工作,并执行与外设无关的操作,一旦外设需要进行数据交换,就主动向CPU提出中断申请,CPU接到中断请求后,就暂停当前的工作转去为外设服务(执行中断处理程序),处理完毕后又返回到原来暂停处继续进行原来的工作(执行原来的程序)。因此,CPU不必浪费时间去查询外设状态,大大提高了效率。利用中断方式可以实现分时操作(使CPU可以同时处理多件事)、实时处理(对随时发生的事件进行及时处理),应用范围较广。

2.中断的概念

为了能让大家更容易理解中断的概念,我们先来看生活中的一个事例:你正在家中看书,突然门铃响了,你放下书去开门,处理完事情后回来继续看书;突然电话铃又响起来了,你又放下书去接电话,通话完毕后你又回来继续看书。这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。

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

中断的有关关概念总结如下:

  1. 中断  CPU正在执行主程序的过程中,由于CPU之外的某种原因,有必要暂停主程序的执行,转而去执行相应的处理(中断服务)程序。待处理程序结束之后,再返回原程序断点处继续运行的过程。
  2. 中断源   可以引起中断的事件称为中断源。单片机中也有一些可以引起中断的事件。MCS-51单片机中共有5种中断源:两个外部中断(INT0,INT1)、两个定时/计数器中断(T0、T1)和一个串行口中断。
  3. 中断系统   实现中断过程的软、硬件系统。
  4. 主程序与中断服务程序    CPU正在执行的当前程序称为主程序;中断发生后,转去对突发事件的处理程序称为中断服务程序。
  5. 中断优先级   当多个中断源同时申请中断时,为了使CPU能够按照用户的规定先处理最紧急的事件,然后再处理其他事件,就需要中断系统设置优先级机制。通过设置优先级,排在前面的中断源称为高级中断,排在后面的称为低级中断。设置优先级以后,若有多个中断源同时发出中断请求时,CPU会优先响应优先级较高的中断源。如果优先级相同,则将按照它们的自然优先级顺序响应默认优先级较高的中断源。

五个中断源默认的自然优先级是由硬件的查询顺序决定的,由高到低的顺序依次是:外部中断0、定时/计数器0中断、外部中断1、定时/计数器1中断、串行口中断。中断源的优先级需由用户在中断优先级寄存器IP中设定,后面将会讲到这一知识点。

  1. 中断嵌套  当CPU响应某一中断源请求而进入该中断服务程序中处理时,若更高级别的中断源发出中断申请,则CPU暂停执行当前的中断服务程序,转去响应优先级更高的中断,等到更高级别的中断处理完毕后,再返回低级中断服务程序,继续原先的处理,这个过程称为中断嵌套。在51单片机的中断系统中,高优先级中断能够打断低优先级中断以形成中断嵌套,反之,低级中断则不能打断高级中断,同级中断也不能相互打断。

二、MCS-51单片机的中断系统

MCS-51单片机的中断系统的内部结构框图如图5-2所示。

图5-2 MCS-51单片机的中断系统内部结构组成框图

由图可知,51单片机的中断系统有5个中断源,4个用于中断控制的寄存器TCON、SCON、IE、IP来控制中断类型、中断的开关和各种中断源的优先级确定。

1.中断源(5个)

(1)外部中断源(2个)

外部中断0和外部中断1,是由单片机的P3.2和P3.3端口引入的,名称分别为INT0和INT1,低电平或下降沿触发。

(2)定时/计数器中断源(2个)

MCS-51单片机内部有2个16位的定时/计数器,分别是T0和T1。当计数器计满溢出时就会向CPU发出中断请求。

(3)串行口中断源(1个)

MCS-51单片机内部有1个全双工的串行通信接口,可以和外部设备进行串行通信,当串行口接收或发送完一帧数据后会向CPU发出中断请求。

2.中断标志

TCON即定时/计数器控制寄存器,这是一个可位寻址的8位特殊功能寄存器,即可以对其每一位单独进行操作,其字节地址为88H。它不仅与两个定时/计数器的中断有关,也与两个外部中断源有关。它可以用来控制定时/计数器的启动与停止,标志定时/计数器是否计满溢出和中断情况,还可以设定两个外部中断的触发方式、标志外部中断请求是否触发。因此,它又称为中断请求标志寄存器。单片机复位时,TCON的全部位均被清0。其各位名称如表5-1所示。

表5-1   定时/计数器控制寄存器TCON的各位功能说明

位  号

D7

D6

D5

D4

D3

D2

D1

D0

位名称

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

TCON寄存器的各位功能介绍如下:

IT0:外部中断0(INT0)的触发方式控制位。当IT0=0时,

为电平触发方式,低电平触发有效;当IT0=1时,

为边沿触发方式,下降沿触发有效。

IE0:外部中断0(INT0)的中断请求标志位。当外部中断0(INT0)的触发请求有效时,硬件电路自动将该位置1,否则清0。换句话说,当IE0=1时,表明外部中断0正在向CPU申请中断;当IE0=0时,则表明外部中断0没有向CPU申请中断。当CPU响应该中断后,由硬件自动将该位清0,不需用专门的语句将该位清0。

IT1:外部中断1(INT1)的触发方式控制位。当IT1=0时,为电平触发方式,低电平触发有效;当IT1=1时,为边沿触发方式,下降沿触发有效。

IE1:外部中断1(INT1)的中断请求标志位。当外部中断1(INT1)的触发请求有效时,硬件电路自动将该位置1,否则清0。换句话说,当IE1=1时,表明外部中断1正在向CPU申请中断;当IE1=0时,则表明外部中断1没有向CPU申请中断。当CPU响应该中断后,由硬件自动将该位清0,不需用专门的语句将该位清0。

TR0:定时/计数器0(T0)的启动控制位。当TR0=1时,T0启动计数;当TR0=0时,T0停止计数;

TF0:定时/计数器0(T0)的溢出中断标志位。当定时/计数器0计满溢出时,由硬件自动将TF0置1,并向CPU发出中断请求,当CPU响应该中断进入中断服务程序后,由硬件自动将该位清0,不需用专门的语句将该位清0。需要说明的是:如果使用定时/计数器的中断功能,则该位完全不用人为操作,硬件电路会自动将该位置1、清0,但是如果中断被屏蔽,使用软件查询方式去处理该位时,则需用专门语句将该位清0。

TR1:定时/计数器1(T1)的启动控制位。其功能及使用方法同TR0。

TF1:定时/计数器1(T1)的溢出中断标志位。其功能及使用方法同TF0。

3.中断允计寄存器IE

在MCS-51单片机的中断系统中,中断的允许或禁止是在中断允许寄存器IE中设置的。IE也是一个可位寻址的8位特殊功能寄存器,即可以对其每一位单独进行操作,当然也可以进行整体字节操作,其字节地址为A8H。单片机复位时,IE全部被清0。其各位定义如表5-2所示。

表5-2   中断允许寄存器IE的各位功能定义

位  号

D7

D6

D5

D4

D3

D2

D1

D0

位名称

EA

ES

ET1

EX1

ET0

EX0

中断允许寄存器IE的各位功能定义说明如下:

EA:即Enable  All的缩写,全局中断允许控制位。当EA=0时,则所有中断均被禁止;当EA=1时,全局中断允许打开,在此条件下,由各个中断源的中断控制位确定相应的中断允许或禁止。换言之,EA就是各种中断源的总开关。

EX0:外部中断0(INT0)的中断允许位。如果EX0置1,则允许外部中断0中断,否则禁止外部中断0中断。

ET0:定时/计数器0的中断允许位。如果ET0置1,则允许定时/计数器0中断,否则禁止定时/计数器0中断。

EX1:外部中断1(INT1)的中断允许位。如果EX1置1,则允许外部中断1中断,否则禁止外部中断1中断。

ET1:定时/计数器1的中断允许位。如果ET1置1,则允许定时/计数器1中断,否则禁止定时/计数器1中断。

例如:如果我们要设置允许外部中断0、定时/计数器1中断允许,其他中断不允许,则IE寄存器各位取值如表5-3所示。

表5-3   IE寄存器的各位取值

位  号

D7

D6

D5

D4

D3

D2

D1

D0

位名称

EA

ES

ET1

EX1

ET0

EX0

取  值

1

0

0

0

1

0

0

1

即IE=0x89。当然,我们也可以用位操作指令来实现:EA=1,EX0=1,ET1=1。

4.中断优先级寄存器IP

前面已讲到中断源优先级的概念。在MCS-51单片机的中断系统中,中断源按优先级分为两级中断:1级中断即高级中断,0级中断即低级中断。中断源的优先级需在中断优先级寄存器IP中设置。IP也是一个可位寻址的8位特殊功能寄存器,即可以对其每一位单独进行操作,当然也可以进行整体字节操作,其字节地址为B8H。单片机复位时,IP全部被清0,即所有中断源为同级中断。如果在程序中不对中断优先级寄存器IP进行任何人为操作,则当多个中断源发出中断请求时,CPU会按照其默认的自然优先级顺序优先响应自然优先级较高的中断源。IP的各位定义如表5-4所示。

表5-4   中断优先级寄存器IP的各位功能定义

位  号

D7

D6

D5

D4

D3

D2

D1

D0

位名称

PS

PT1

PX1

PT0

PX0

PX0、PT0、PX1、PT1、PS分别为外部中断0、定时/计数器0中断、外部中断1、定时/计数器1中断、串行口中断的优先级控制位。当某位置1时,则相应的中断就是高级中断,否则就是低级中断。优先级相同的中断源同时提出中断请求时,CPU优先响应自然优先级较高的中断。

5.中断初始化及中断服务程序结构

中断初始化实质上就是对4个与中断有关的特殊功能寄存器TCON、SCON、IE和IP进行管理和控制,具体实施如下:

  • CPU的开、关中断(即全局中断允许控制位的打开与关闭,EA=1或EA=0);

② 具体中断源中断请求的允许和禁止(屏蔽);

③ 各中断源优先级别的控制;

④ 外部中断请求触发方式的设定。

中断管理和控制(中断初始化)程序一般都包含在主函数中,也可单独写成一个初始化函数,根据需要通常只需几条赋值语句即可完成。中断服务程序是一种具有特定功能的独立程序段,往往写成一个独立函数,函数内容可根据中断源的要求进行编写。

C51的中断服务程序(函数)的格式如下:

void  中断处理程序函数名( ) interrupt  中断序号  using 工作寄存器组编号

{

      中断处理程序内容

}

中断处理程序函数不会返回任何值,故其函数类型为void,函数类型名void后紧跟中断处理程序的函数名,函数名可以任意起,只要合乎C51中对标识符的规定即可;中断处理函数不带任何参数,所以中断函数名后面的括号内为空;interrupt即“中断”的意思,是为区别于普通自定义函数而设,中断序号是编译器识别不同中断源的唯一符号,它对应着汇编语言程序中的中断服务程序入口地址,因此在写中断函数时一定要把中断序号写准确,否则中断程序将得不到运行。函数头最后的“using 工作寄存器组编号”是指这个中断函数使用单片机RAM中4组工作寄存器中的哪一组,如果不加设定,C51编译器在对程序编译时会自动分配工作寄存器组,因此“using 工作寄存器组编号”通常可以省略不写。

51单片机的5个中断源的中断序号、默认优先级别、对应的中断服务程序的入口地址如表5-5所示:

表5-5   51单片机的中断源的中断序号、默认优先级及对应的中断服务程序入口地址

中断源名称

中断序号

默认优先级别

中断服务程序入口地址

外部中断0(INT0)

0

最高

0003H

定时/计数器0中断

1

第2

000BH

外部中断1(

2

第3

0013H

定时/计数器1中断

3

第4

001BH

串行口中断

4

第5

0023H

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1269310.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++基础 -17-继承中 基类与派生构造和析构调用顺序

首先声明 定义了派生类会同时调用基类和派生的构造函数 定义了派生类会同时调用基类和派生的析构函数 那么顺序如何如下图 构造由上往下顺序执行 析构则完全相反 #include "iostream"using namespace std;class base {public:base(){cout << "base-bui…

从事涉密测绘业务的人员应当具有中华人民共和国国籍,签订保密责任书,接受保密教育。

1、从事涉密测绘业务并签署保密责任书的人员清单&#xff08;包括&#xff1a;姓名、身份证号码、工作岗位、责任书签署日期&#xff09; 2、近三年内&#xff08;或培训证书仍在有效期内&#xff09;接受过省级自然资源主管部门或者其它单位及部门组织的测绘地理信息安全保密政…

零代码编程:用ChatGPT批量设置Word文件格式

文件夹中有很多txt文本文件&#xff0c;要转换成word文件&#xff0c;且要批量设置一些文件格式&#xff0c;方便后续的打印。 文本文件如下&#xff1a; 在chatgpt中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个处理word内容的任务&#xff0c;具体…

YOLOV8解读及推理代码

YOLOV8解读及推理代码 YOLOV8前言性能对比新的骨干网络新的 Ancher-Free 检测头新的损失函数环境配置训练基于python脚本基于命令行 推理pt模型推理onnx模型推理 YOLOV8 前言 YOLOv8并非一个全新的目标检测网络&#xff0c;而是在YOLOv5的基础上进行了升级。其主要升级包括&am…

enote笔记法之附录2——5w1h2k关联词(ver0.22)

enote笔记法之附录2——5w1h2k关联词&#xff08;ver0.22&#xff09; 最上面的是截屏的完整版&#xff0c;分割线下面的是纯文字版本&#xff1a; 作者姓名&#xff08;本人的真实姓名&#xff09;&#xff1a;胡佳吉 居住地&#xff1a;上海 作者网名&#xff1a;EverSt…

裁员降薪如果影响到你,可能还是你的问题

1.摘要 今年以来,看到的裁员风波一茬接一茬,普遍的论调都是IT行业不行了, 总之就是一片哀嚎、惨不忍睹。最近身边的一些朋友也接连传出部门被优化、被裁员的消息, 说实话我自己也被这种寒意给触碰到, 每天也加强了自己的学习频率,甚至把回家路上的碎片时间也利用起来, 目的不在…

高效管理团队表现:构建可视化的贡献度面板组件

说在前面 贡献度面板&#xff08;Contribution Graph&#xff09;是指在代码仓库中按时间展示每位开发者的提交情况的可视化图表。它会显示不同日期的提交次数&#xff0c;并用颜色的深浅表示提交的数量。 贡献度面板展现的好处有以下几点&#xff1a; 可视化展示&#xff1…

『Nginx安全访问控制』利用Nginx实现账号密码认证登录的最佳实践

&#x1f4e3;读完这篇文章里你能收获到 如何创建用户账号和密码文件&#xff0c;并生成加密密码配置Nginx的认证模块&#xff0c;实现基于账号密码的登录验证 文章目录 一、创建账号密码文件1. 安装htpasswd工具1.1 CentOS1.2 Ubuntu 二、配置Nginx三、重启Nginx 在Web应用程…

redis的数据类型的操作增删改查

redis的数据类型的操作增删改查 redis的高可用&#xff1a; 在集群当中有一个非常重要的指标&#xff0c;提供正常服务的时间的百分比&#xff08;365天&#xff09;99.9% redis的高可用的含义要更加宽泛&#xff0c;正常服务是指标之一数据容量扩展&#xff0c;数据的安全性…

ubuntu下训练自己的yolov5数据集

参考文档 yolov5-github yolov5-github-训练文档 csdn训练博客 一、配置环境 1.1 安装依赖包 前往清华源官方地址 选择适合自己的版本替换自己的源 # 备份源文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list_bak # 修改源文件 # 更新 sudo apt update &&a…

三季度同道猎聘遇“瓶颈”,破局重点是中高端人才?

古往今来&#xff0c;人才一直是企业“争夺”的对象。随着新兴产业的快速冒头以及AI技术的崛起&#xff0c;新型人才以及中高端人才成为市场上的香饽饽&#xff0c;而这类人才的稀缺性让企业和招聘平台双方都很“头疼”。再加上外部环境的不确定性增加&#xff0c;职场人普遍求…

打造独特封面:封面设计的关键要素与技巧解析!

书籍作品的封面设计非常精致。就像商品的包装一样&#xff0c;有助于提高书籍的销量。书封的设计表现主要从图像、文字、材质等方面进行设计。基本上所有的书都需要有文字&#xff0c;所以特别考验设计师的文字排版能力。今天就和大家分享一些书籍封面设计的小知识&#xff0c;…

轻松整合Knife4j:快速搭建Swagger文档界面与接口调试

Knife4j 是一个为 Java 开发者提供的 Swagger 文档聚合工具&#xff0c;它是 Swagger-Bootstrap-UI 的升级版。它的主要功能是生成和展示 API 文档&#xff0c;让开发者能够更轻松地查看和测试接口。 整合 Knife4j&#xff08;Swagger-Bootstrap-UI 的升级版&#xff09;到 Spr…

VT驱动开发

VT技术(编写一个VT框架) 1.VT技术介绍 1.技术介绍 1.VT技术 VT技术是Intel提供的虚拟化技术&#xff0c;全称为Intel Virtualization Technology。它是一套硬件和软件的解决方案&#xff0c;旨在增强虚拟化环境的性能、可靠性和安全性。VT技术允许在一台物理计算机上同时运…

WebSocket 接口测试:打通前端与后端的通信之路!

什么是 WebSocket? WebSocket 是一种基于在单个 TCP 连接上进行全双工通信的协议&#xff0c;解决了HTTP协议不适用于实时通信的缺点&#xff0c;相较于 HTTP 协议&#xff0c;WebSocket 协议实现了持久化网络通信&#xff0c;可以实现客户端和服务端的长连接&#xff0c;能够…

微信小程序——给按钮添加点击音效

今天来讲解一下如何给微信小程序的按钮添加点击音效 注意&#xff1a;这里的按钮不一定只是 <button>&#xff0c;也可以是一张图片&#xff0c;其实只是添加一个监听点击事件的函数而已 首先来看下按钮的定义 <button bind:tap"onInput" >点我有音效&…

xxl-job适配postgresql数据库

xxl-job支持了mysql数据库&#xff0c;其他的数据库适配得自己弄一下&#xff0c;下面以目前最新的2.4.1为例进行说明适配postgresql数据库的过程。 获取源代码 从github或gitee获取源代码&#xff0c;目前最新版本2.4.1 xxl官网&#xff1a;分布式任务调度平台XXL-JOB 建立…

OpenCvSharpSlim画中文

github地址&#xff1a;https://github.com/AvenSun/OpenCvSharpSlim Slim Build of OpenCvSharp OpenCvSharpSlim This project provides the slim build of OpenCvSharp native library . Currently therere binary packages for OpenCvSharp 2.4.10, 3.4.20 ,4.8.0 and 4…

关键词挖掘软件-免费批量挖掘关键词的工具

在当今数字化时代&#xff0c;网站的曝光和排名对于吸引流量至关重要。而在这个大数据的背后&#xff0c;SEO&#xff08;Search Engine Optimization&#xff0c;搜索引擎优化&#xff09;成为许多网站主和创作者们追逐的关键。在SEO的世界里&#xff0c;关键词的选择和优化是…

数据结构与算法之美学习笔记:28 | 堆和堆排序:为什么说堆排序没有快速排序快?

目录 前言如何理解“堆”&#xff1f;如何实现一个堆&#xff1f;1. 往堆中插入一个元素2. 删除堆顶元素 如何基于堆实现排序&#xff1f;1. 建堆2. 排序 解答开篇内容小结 前言 本节课程思维导图&#xff1a; 我们今天讲另外一种特殊的树&#xff0c;“堆”&#xff08;Heap&…