第5章 单片机的中断系统

5.1 中断的概念

5.2 中断控制系统

5.3 中断处理过程

5.4 中断的编程及应用举例

5.1 中断的概念

日常生活的中断现象举例

中断是指在突发事件到来时先中止当前正在进行的工作,转而去处理突发事件。待处理完成后,再返回到原先被中止的工作处,继续进行随后的工作。

中断的一般概念

中断响应过程:由中断管理系统处理突发事件的过程;

中断源:中断管理系统能够处理的突发事件;

中断请求:中断源向CPU提出的处理请求;

中断函数:针对中断源和中断请求提供的服务函数;

中断嵌套:在中断服务过程中执行

更高级别的中断服务。

中断过程与调用一般函数过程的相似性:

        两者都需要保护断点,都可实现多级嵌套等。

中断过程与调用一般函数过程的差异性:

1、前者是程序设计者事先安排的(断点位置是明确的),而后者却是系统根据工作环境随机决定的(断点位置是随机的)。

2、主函数与一般函数之间具有主从关系,而主函数与中断函数之间则是平行关系(中断函数只能被系统调用);

3、一般函数调用是纯粹软件处理过程,而中断函数调用却是需要软、硬件配合才能完成的过程。

中断能实现的功能:

1分时操作CPU可以使多个外设同时工作,并分时为各外设提供服务,从而大大提高了CPU的利用率和输入/输出的速度。

2实时处理:当计算机用于实时控制时,请求CPU提供服务是随机发生的。有了中断系统,CPU就可以立即响应并加以处理。

3故障处理:当计算机运行中出现如电源断电、存储器校验出错、运算溢出等错误时,CPU可及时转去执行故障处理程序,减小或消除故障产生的影响。

在计算机与外部设备交换信息时,存在高速的CPU和低速的外设之间的矛盾。为了保证CPU送来的数据不至于丢失,可以采取两种办法:查询方式和中断方式。

中断法编程的思路:

让系统在后台等待被测源P3.2的状态变化,一旦有变就中止主函数的任务,转而执行P2.0的输出。

程序由主函数和中断函数组成,中断函数int0_srv( )完成p2_0电平翻转作用,主函数中的while(1)语句则模拟任意任务的语句。

主函数中没有检测语句,不会消耗主函数的机时,可提高检测效率。

疑问

1、中断函数为何能自动执行?

2、主函数中变量赋值语句的作用?

答案

1P3.2的负脉冲信号是约定的中断源信息,可硬件激活中断响应;

2、中断系统的相关初始化工作。

5.2 中断控制系统

 5.2.1 中断系统的结构

1、中断源(哪些信号可以作为51单片机中断源?)

中断源数量和种类越多,MCU处理突发事件的能力就越强。

80C51单片机共有5种中断源。

  1. 中断事件出现后,系统将调用与该中断源相对应的中断函数进行中断处理。
  2. 汇编语言中规定了5个特殊的ROM单元用于引导中断程序的调用,这些单元的地址称为中断向量。
  3. 汇编编程时,需要在此单元处放置一条指向中断程序入口地址的跳转语句,以便引导中断程序的执行。
  4. 对于C51语言,调用中断函数时不用中断向量,而要用到与中断源相应的中断号。
  5. 80C51的中断源、中断向量及中断号的对应关系如下表所示。

2、中断请求标志(单片机如何得知中断信号出现?)

当中断信号出现时,单片机中某些寄存器位(中断请求标志位)可被硬件置1

CPU通过定期查看中断请求标志位是否为1,便可知道有无中断请求出现。

中断请求标志的置1原理

5.2.2 中断控制

中断系统的组成(影响中断的因素?)

中断信号分别沿5条水平路径由左向右进行传送。

其中,TCONSCONIEIP是相关SFR

1TCON寄存器

定时/计数器的控制寄存器Timer/Counter Control Register字节地址为88H可位寻址

2SCON寄存器

串口控制寄存器(Serial control register),字节地址为98H,可位寻址。

注意TIRI虽然是2个中断请求标志位,但在SCON之后经或门电路合成为1个信息,统一接受中断管理。

3IE寄存器

中断允许寄存器(Interrupt Enable Register),字节地址为A8H,可位寻址。

注意单片机复位后IE初值为0——默认为禁止所有中断

4IP 寄存器

中断优先级寄存器(Interrupt Priority Registers),字节地址为B8H,可位寻址。

注意每个中断源的优先级都有两种选择,可被选入两个队列之一

优先级原则:

1)高级中断请求可以打断正在执行的低级中断;

2)同级或低级中断请求不能打断正在执行的中断;

3)同级中断源同时提出请求时按自然优先级响应:

     /INT0→ T0 → /INT1→T1→TI/RI

4)单片机复位时,IP初值为0——默认

     所有中断源均为低级中断

中断标志汇总

中断管理寄存器汇总

中断系统汇总

5.3 中断处理过程

中断处理包括中断请求、中断响应、中断服务等环节。

1.中断响应

中断响应是指CPU从发现中断请求,到开始执行中断函数的过程。CPU响应中断的基本条件为:

① 有中断源发出中断请求;

② 中断总允许位EA=1,即CPU开中断;

③ 申请中断的中断源的中断允许位为1,即没有被屏蔽。

满足以上条件后,CPU一般都会响应中断。但如果遇到一些特殊情况,中断响应还将被阻止,例如CPU正在执行某些特殊指令,或CPU正在处理同级的或更高优先级的中断等。待这些中断情况撤销后,若中断标志尚未消失,则CPU还可继续响应中断请求,否则中断响应将被中止。

CPU响应中断后,由硬件自动执行如下功能操作:

① 中断优先级查询,对后来的同级或低级中断请求不予响应;

② 保护断点,即把程序计数器PC的内容压入堆栈保存;

③ 清除可清除的中断请求标志位(见中断撤销);

④ 调用中断函数并开始运行;

⑤ 返回断点继续运行。

可见,除中断函数运行是软件方式外,其余中断处理过程都是由单片机硬件自动完成的。

2.响应时间

从查询中断请求标志到执行中断函数第一条语句所经历的时间,称为中断响应时间。

不同中断情况,中断响应时间是不一样的,以外部中断为例,最短的响应时间为3个机器周期。

这是因为,CPU在每个机器周期的S6期间查询每个中断请求的标志位。如果该中断请求满足所有中断条件,则CPU从下一个机器周期开始调用中断函数,而完成调用中断函数的时间需要2个机器周期。这样中断响应共经历了1个查询机器周期加2个调用中断函数周期,总计3个机器周期,这也是对中断请求作出响应所需的最短时间。

如果中断响应受阻,则需要更长的响应时间,最长响应时间为8个机器周期。一般情况下,在一个单中断系统里,外部中断的响应时间在38个机器周期之间。如果是多中断系统,且出现了同级或高级中断正在响应或正在服务中,则需要等待响应,那么响应时间就无法计算了。

这表明,即使采用中断处理突发事件,CPU也存在一定的滞后时间。在可能的范围内提高单片机的时钟频率(缩短机器周期),可减少中断响应时间。

3.中断撤销

中断响应后,TCONSCON中的中断请求标志应及时清0,否则中断请求将仍然存在,并可能引起中断误响应。不同中断请求的撤销方法是不同的。

对于定时/计数器中断,中断响应后,由硬件自动对中断标志位TF0TF10,中断请求可自动撤销,无须采取其他措施。

对于脉冲触发的外部中断请求,在中断响应后,也由硬件自动对中断请求标志位IE0IE10,即中断请求的撤销也是自动的。

对于电平触发的外部中断请求,情况则不同。中断响应后,硬件不能自动对中断请求标志位IE0IE10。中断的撤销,要依靠撤除引脚上的低电平,并用软件使中断请求标志位清0才能有效。由于撤除低电平需要有外加硬件电路配合,比较烦琐,因而采用脉冲触发方式便成为常用的做法。

对于串口中断,其中断标志位TIRI不能自动清0。因为在中断响应后,还要测试这两个标志位的状态,以判定是接收操作还是发送操作,然后才能清除。所以串口中断请求的撤销是通过软件方法实现的。

4.中断函数

中断服务是针对中断源的具体要求进行设计的,需要用户自己编写。C51中断函数采用如下定义格式:

void 函数名 (void) interrupt nusing m

{ 函数体语句 }

这里interruptusing都是C51扩展的关键词,其中:

整数n是与中断源相对应的中断号,使用interrupt n可以让编译器知道相应中断向量地址(=8n+3),并在这个地址上自动安排一个指向该中断函数首地址的无条件跳转指令。由于无须人工处理跳转,编写C51中断函数要比编写汇编语言中断服务程序更加简明快捷

整数m是工作寄存器组的组号,C51组号m80C51工作寄存器组的关系如表5.4所示。使用using m可以切换工作寄存器组,省去中断响应时为保护断点进行的压栈操作,从而提高中断处理的实时性。using m省略时默认采用当前工作寄存器组(由特殊功能寄存器PSWRS1RS0位设定)。

C51一般函数的定义格式:

 〔返回值类型〕函数名(形式参数〕)〔编译模式〕〔reentrant〕〔interrupt xusing y

C51中断函数的定义格式:

  void 函数名 (void) interrupt nusing m

可见,C51中断函数是C51一般函数的一个特例:

① 中断函数是没有返回值的void型函数;

② 中断函数是没有形参的无参函数;

③ 中断函数采用系统默认编译模式;

④ 中断函数不是可重入的函数;

使用C51中断函数还需要注意以下几点:

① 允许在中断函数中使用return语句(表示结束中断),但不能使用带有表达式的return语句,如return(z)

② 可以通过使用全局变量,将变量值传入或传出中断函数,以此弥补无参和无返回值的使用限制;

③ 中断函数只能被系统调用,不能被其他任意函数调用。

④ 为提高中断响应的实时性,中断函数应尽量简短,并尽量使用简单变量类型及简单算术运算。一种常用的编程做法是,在中断函数中仅更新全局性标志变量值,而在主函数或其他函数中根据该标志变量值再做相应处理,这样就能较好地发挥中断对突发事件的应急处理能力。

5.4 中断编程及应用

5.4.1 中断的编程和应用举例

实例2】中断扫描法行列式键盘

试比较查询法键盘和中断法键盘的差异,并完成中断法键盘的硬件设计和软件编程工作。

分析:

在单片机应用系统中,键盘扫描只是CPU工作的内容之一。CPU在忙于各项工作任务时,需要兼顾键盘扫描,既保证不失时机地响应键操作,又不过多地占用CPU时间。

因此,可以采用中断扫描方式来提高CPU的效率,即只有在键盘有键按下时,才执行键盘扫描程序;如果无键按下,则将键盘视为不存在。

相比可知,中断法中当各列电平都为0时,无论压下哪个按键,与门的输出端都可形成/INT0的中断请求信号。这样便可将按键的扫描查询工作放在中断函数中进行,从而就能达到既快速响应按键动作,又提高CPU工作效率的目的。

硬件更改

增加一个4输入与门器件U3→行线分接输入端,输出端接P3.2INT0)

软件更改

①主函数中进行中断初始化,中断函数中查找闭合键号并刷新LED显示

每次中断返回前都应将列电平置为全低,行电平置为全高,为下次中断做准备 。

实例2源程序

【实例3中断方式的键控流水灯

试将第4章实例2的查询法进行按键检测的流水灯示例,改为用中断法进行按键检测的流水灯示例(包括硬件电路和软件编程)。

实例2的问题:当CPU运行于LED循环环节时,将因不能及时检测按键状态,而使按键操作不灵敏。

硬件改动:增加一只4输入与门电路,使按键闭合电平作为外部中断信号。

软件改动:将标志位修改功能放在中断函数中进行

实例3源程序

实例4 观察两级中断嵌套效果

根据如图所示的数码管显示与按键电路图,编程实现两级外部中断嵌套演示效果。其中K0定为低优先级中断源,K1为高优先级中断源。此外,利用发光二极管D1验证外部中断请求标志IE0在脉冲触发中断时的硬件置位与撤销过程。

分析

利用3只数码管分别进行字符19的循环显示,其中由主函数对LED0进行无限计数显示,由中断函数K0K1分别对LED1LED2进行单圈计数显示。由此观察中断及中断嵌套现象。

②为观察IE0的撤销过程,在K1中断函数里将IE0值送P3.0输出。由此观察IE0的变化。

实例4源程序

5.4.2 扩展外部中断源

MCS-51系列单片机只有两个外部中断源输入端。当所设计的应用系统需要两个以上外部中断源时,就要进行外部中断源的扩展。

利用定时器扩展外部中断源参见第6章的实例3

利用查询法扩展外部中断源

基本思路是,每根中断输入线可以通过“线或”的关系连接多个外部中断源,同时利用输入端口线作为各个中断源的识别线。

采用优先权解码芯片74LS148扩展外部中断源

8个任意按键按下时,解码芯片的GS引脚都将使80C51        引脚产生中断请求。中断函数只需保存解码芯片形成的中断分支码,并置位自定义中断标志位即可返回。在主函数中,则可根据中断标志位判断有无中断发生,并根据中断分支码判断中断请求分支号,据此可实现8路外部中断源的扩展。

在主函数中,则可根据中断标志位判断有无中断发生,根据中断分支码判断中断请求分支号,据此可实现8路外部中断

【实例5扩展8路外部中断源

下图为模拟解码芯片74LS148扩展8路外部中断源应用的电路图。试编写程序,实现用数码管的显示值模拟扩展后的中断分支程序的功能。

【解】分析:

P2中包含了解码芯片74LS1483位编码输出值7~05位悬空引脚的高电平。为使其变换为0~7的编码信息,可以对P2进行取反后屏蔽高5位的运算,即~P2&0x07。然后将变换结果作为分支跳转条件和数码管字模数组指针,实现模拟扩展外部中断函数的效果。

实例5源程序

本章小结

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

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

相关文章

状态管理的艺术:探索Flutter的Provider库

状态管理的艺术:探索Flutter的Provider库 前言 上一篇文章中,我们详细介绍了 Flutter 应用中的状态管理,以及 StatefulWidget 和 setState 的使用。 本篇我们继续介绍另一个实现状态管理的方式:Provider。 Provider优缺点 基…

【论文速读】| 涟漪下的漩涡:对启用RAG的应用程序的实证研究

本次分享论文:Vortex under Ripplet: An Empirical Study of RAG-enabled Applications 基本信息 原文作者:Yuchen Shao, Yuheng Huang, Jiawei Shen, Lei Ma, Ting Su, Chengcheng Wan 作者单位:East China Normal University, The Unive…

JVM基本知识——运行空间

JVM(Java Virtual Machine)即Java虚拟机,是负责读取java字节码,并在实际的硬件环境中运行。 JVM可以分为三部分:类装载器(ClassLoader)子系统、内存空间、执行引擎 内存空间(运行时…

高职院校人工智能人才培养成果导向系统构建、实施要点与评量方法

一、引言 近年来,人工智能技术在全球范围内迅速发展,对各行各业产生了深远的影响。高职院校作为培养高技能人才的重要基地,肩负着培养人工智能领域专业人才的重任。为了适应社会对人工智能人才的需求,高职院校需要构建一套科学、…

【STC89C51单片机】定时器/计数器的理解

目录 定时器/计数器1. 定时器怎么定时简单理解(加1经过了多少时间)什么是时钟周期什么是机器周期 2.如何设置定时基本结构相关寄存器1. TMOD寄存器2. TCON寄存器 代码示例 定时器/计数器 STC89C51单片机的定时器和计数器(Timers and Counter…

基于STM32老人摔倒报警设计

1.简介 随着我国老年人人口不断上升,我国已经进入人口老龄化,老龄人的人数加剧随着而来的就是基本的健康安全问题成为了如今社会主要解决的问题。随着已经步入信息时代,为了解决老年人的健康问题,相关技术的使用已经成为一个热门话…

JVM高频面试点

文章目录 JVM内存模型程序计数器Java虚拟机栈本地方法栈Java堆方法区运行时常量池 Java对象对象的创建如何为对象分配内存 对象的内存布局对象头实例数据对齐填充 对象的访问定位 垃圾收集器找到垃圾引用计数法可达性分析(根搜索法) 引用概念的扩充回收方…

COD论文学习 ZoomNext

现有方法的不足之处 高内在相似性:伪装物体与背景之间的高内在相似性使得检测变得困难,现有方法难以准确区分二者。多样化的规模和模糊的外观:伪装物体在规模和外观上多样化,且可能严重遮挡,导致现有方法难以处理。不…

【青书学堂】2024年第一学期 保险理论与实务(高起专) 作业

【青书学堂】2024年第一学期 保险理论与实务(高起专) 作业 为了方便日后复习,青书学堂成人大专试题整理。 若有未整理的课程,请私信我补充,欢迎爱学习的同学们收藏点赞关注!文章内容仅限学习使用!!&#xf…

「C++」类和对象(1)

欢迎来到海盗猫鸥的博客~~ 本篇我们将学习部分C中的类和对象相关知识沃~ (• ω •)ノ算我一个~ 目录 类的定义 类的定义及使用 访问限定符 类域 实例化 实例化概念: 对象大小: 内存对齐规则: 注意点&#xff…

十二.核心动画 - 动画缓冲①(框架提供的缓存函数)

引言 上一篇博客我们已经讨论了Core Animation中时间的处理,以及CAMediaTiming协议。本篇博客我们就来看一下另外一个和时间有关的机制--缓冲。 缓冲会让动画看起来更平滑更自然,我们在本篇博客将会体验一下CAAnimation提供的缓存函数,UIVi…

TCP vs UDP:网络编程的双刃剑艺术

在浩瀚的网络编程世界里,TCP(传输控制协议)与UDP(用户数据报协议)如同两位性格迥异的剑客,各自以其独特的剑法与风格,在网络通信的舞台上独领风骚。今天,就让我们深入探索这两位网络…

【DevOps系列】DevOps简介及基础环境安装

作者:后端小肥肠 目录 1. 前言 2. DevOps(详细介绍) 3. Code阶段工具 3.1 Git安装 3.2 GitLab安装 4. Build阶段工具 5. Operate阶段工具 5.1 Docker安装 5.2 Docker-Compose安装 6. Integrate工具 6.1 Jenkins介绍 6.2 Jenkins安…

Axure中继器入门:打造你的动态原型

前言 中继器 是 Axure 中的一个高级功能,它能够在静态页面上模拟后台数据交互的操作,如增加、删除、修改和查询数据,尽管它不具备真实数据存储能力。 中继器就像是一个临时的数据库,为我们在设计原型时提供动态数据管理的体验&a…

Java二十三种设计模式-抽象工厂模式(3/23)

抽象工厂模式:复杂系统的灵活构建者 引言 在软件开发中,抽象工厂模式是一种提供接口以创建相关或依赖对象族的创建型设计模式。这种模式允许客户端使用一个共同的接口来创建不同的产品族,而无需指定具体类。 基础知识,java设计模…

Redis Cluster集群搭建只能正常启动一个怎么解决

Redis Cluster集群搭建只能正常启动一个怎么解决 建立redis集群时不小心就遇到了这问题 上图看 这两个都没有问题 接下来这个就出现问题啦 6380没有cluster集群 这个就是连不上 配置文件没错 看了几遍了 那该怎么办? 明明都一样的配置文件,为啥这…

成都亚恒丰创教育科技有限公司 【插画猴子:笔尖下的灵动世界】

在浩瀚的艺术海洋中,每一种创作形式都是人类情感与想象力的独特表达。而插画,作为这一广阔领域中的璀璨明珠,以其独特的视觉语言和丰富的叙事能力,构建了一个又一个令人遐想连篇的梦幻空间。成都亚恒丰创教育科技有限公司 在众多插…

解析DDD中的聚合对象

对象这个词对我们而言并不陌生。以最常见的面向对象为例,软件系统中的任何事物都被认为是一种对象。而针对如何设计和实现这些对象,也存在一批开发模式。例如,一种传统的做法是从数据的角度来规划对象的组织形式,先设计数据库模型…

甲骨文面试题【动态规划】力扣377.组合总和IV

给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 示例 1: 输入:nums [1,2,3], target 4 输出:7 解释&#x…

QTableView仿Excel表头排序和筛选

一.效果 Excel的排序和筛选弹窗如下所示 功能非常强大。不仅支持内容排序和筛选,还支持颜色的排序和筛选,而且还支持设置多种过滤条件。本文只仿最常用的内容排序和内容单过滤条件的筛选,效果如下所示。 从效果图中可以看出,表头Section中的按钮有下列六种状态 enum Butt…