《单片机及嵌入式系统原理》单片机课件 第七章 51单片机中断系统_第1页
《单片机及嵌入式系统原理》单片机课件 第七章 51单片机中断系统_第2页
《单片机及嵌入式系统原理》单片机课件 第七章 51单片机中断系统_第3页
《单片机及嵌入式系统原理》单片机课件 第七章 51单片机中断系统_第4页
《单片机及嵌入式系统原理》单片机课件 第七章 51单片机中断系统_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章

51单片机中断系统

本章内容7.1中断的基本概念(重点)7.251单片机的中断系统(重点)7.3MCS-51中断处理过程(重点)

7.4中断的程序设计(重点)7.1中断的基本概念(1)中断是一个过程:当CPU内部或外部出现某种事件(中断源)需要处理时,中止正在执行的程序(断点),转去执行请求中断的那个事件的处理程序(中断服务程序),执行完后,再返回被暂时中止执行的程序(中断返回),从断点处继续执行。。(2)中断系统是实现和处理中断功能的软、硬件的集合。整个中断过程由计算机的中断系统配合用户设计的中断服务程序来实现。所有计算机必须有中断系统。(3)中断源是产生申请中断信号的单元和事件,也即导致CPU产生中断的来源。7.1中断的基本概念(4)可屏蔽中断和不可屏蔽中断:不可屏蔽中断,程序员不能控制它,一旦产生了不可屏蔽中断,系统肯定会立即响应;而对于可屏蔽中断,程序员可以通过指令来控制CPU对它们的响应。(5)硬件中断和软件中断:硬件中断的请求时间,程序员无法控制,它们基本上是随机产生的;而对于软件中断,汇编语言程序员可通过指令来有目的安排它们产生时间和位置。(6)内部中断和外部中断:内部中断是CPU内部集成的许多功能模块,如定时器、串行通讯口、模/数转换器等,它们在正常工作时往往无需CPU参与,而当他们处于某种状态或达到某个规定值需要程序控制时,会通过发出中断请求信号通知CPU。典型例子有定时器溢出中断,如8位的定时器在正常计数过程中无需CPU的干预,一旦计数到达0xff产生溢出时便产生一个中断申请信号,通知CPU进行必要的处理。内部中断源在中断条件成立时,一般通过片内硬件会自动产生中断请求信号,无须用户介入,使用方便。内部中断是CPU管理片内资源的一种高效的途径。一个中断信号(通常是高/低电平或者电平跳变的上升/下降沿)送到CPU的外部中断请求引脚。这些中断源是通过CPU的引脚进行中断请求的,称为外部中断源。7.1中断的基本概念(7)中断处理过程中断处理过程,也叫中断过程,天下所有中断一般包含以下五个步骤:中断请求、中断判优、中断响应、中断处理以及中断返回。中断请求:由中断源发出中断请求信号,外部由硬件产生,内部由指令产生。中断判优:如果有两个或两个以上中断源同时发出中断请求,要根据中断优先权,找出最高级别的中断源,首先响应其中断请求,处理完后再响应较低一级的中断源。中断响应:CPU接到中断请求信号后,在满足条件的情况下,CPU进入中断响应周期。中断处理:中断处理也叫中断服务,是由中断服务程序完成的。中断服务程序是用户编写的。中断返回:程序自动返回到断点地址,继续执行被中断的主程序。中断服务程序的最后必须是中断返回指令RETI。7.1中断的基本概念(8)其中:中断响应很特殊,CPU响应中断后将自动完成以下处理:1)断点保护。把断点地址自动压入堆栈。2)形成中断入口地址。CPU响应中断后,根据判优逻辑提供的中断源标识,获得中断服务程序的入口地址,转向对应的中断服务程序。(9)其中:中断处理过程很特殊,用户编写的中断服务程序一般应由以下几部分按顺序组成:1)保护现场:对于主程序中需要保护的一些寄存器和变量,但在CPU进入中断服务程序时硬件无法自动保护,需要用户编程用入栈指令把这些内容压入堆栈,以便返回后CPU能正确运行原程序。值得注意的是,断点地址是由硬件自动保护的,不用在用户在中断服务程序中编程进行保护。2)中断服务程序:执行输入/输出或事件处理程序,由用户编写。(10)其中,中断返回过程很特殊:是程序自动返回到断点地址,继续执行被中断的主程序。中断服务程序的最后必须是中断返回指令RETI(类似C语言里面的函数最后一个语句必须是Return),由CPU自动完成以下功能:1)将相应的优先级触发器清0;2)从堆栈中弹出断点地址给PC;3)回到中断处继续执行。7.1中断的基本概念(11)中断处理示意图7.1中断的基本概念(12)中断优先级和中断嵌套

通常,CPU可以接收若干个中断源发出的中断请求。但在同一时刻,CPU只能响应这些中断请求中的其中一个。为了避免CPU同时响应多个中断请求带来的混乱,每一个中断源赋予一个特定的中断优先级。一旦有多个中断请求信号,CPU先响应中断优先级高的中断请求,然后再逐次响应优先级次一级的中断。中断优先级也反映了各个中断源的重要程度,同时也是分析中断嵌套的基础。使用优先级的情况是:1)某一时刻同时有两(多)个中断源申请中断。在这种情况下,CPU首先响应中断优先级最高的那个中断,而将其它的中断挂起。待优先级最高的中断服务程序执行完成返回后,再顺序响应优先级较低的中断。2)当MCU已经响应了某个中断正在执行为其服务的中断程序时,此时又产生一个其它的中断申请,这种情况也称作中断嵌套。7.1中断的基本概念(13)课题:嵌入式打标机中的中断处理

7.1中断的基本概念(14)注意

一些CPU内部(如51系列CPU)集成了中断管理系统。其硬件能够自动实现中断优先级判断以及进行中断嵌套的处理,也即单片机芯片内部的硬件电路能够识别中断的优先级,并根据优先级的高低自动完成对高优先级中断的优先响应,从而实现中断的嵌套处理。然而,对8086而言,CUP内部没有中断优先级判断电路和中断嵌套处理电路,因此必须外接中断管理芯片才能完成中断的处理,如8259芯片等。7.251单片机的中断系统(1)单片机的五个中断源是: 1)外部中断请求0,由引脚/INT0输入,中断请求标志为IE0。 2)外部中断请求1,由引脚/INT1输入,中断请求标志为IE1。 3)定时器/计数器T0溢出中断:中断请求标志为TF0。 4)定时器/计数器T1溢出中断请求:中断请求标志为TF1。 5)串行口中断:片内串行口完成一帧发送或接收产生的中断,中断请求标志为TI或RI。7.251单片机的中断系统(2)与中断相关的寄存器:

7.251单片机的中断系统(3)51的中断结构:

7.351的中断处理过程(1)得到中断响应的条件: 1)IE寄存器中的中断总允许位EA=1。(大门开) 2)该中断源发出中断请求,即该中断源对应的中断请求标志为“1”。(有请求)

3)该中断源中断允许位=1,即该中断没有被屏蔽。(小门开) 4)无同级或更高级中断正在被服务。(无领导)(2)在允许响应的情况下,下列情况可能被延迟: 1)CPU正在处理同级的或高一级的中断;(领导在) 2)现行的机器周期不是当前所执行指令的最后一个机器周期;(不能让当前指令执行到一半) 3)当前正在执行的指令是返回(RETI)指令或是对IE或IP寄存器进行读/写的指令。(正在操作堆栈)7.351的中断处理过程(3)课题:嵌入式打标机中的中断的响应和处理过程:初始化时SP=30H,CPU即将执行主程序1000H处的指令,这时在单片机的/INT0引脚上出现一个中断请求,则CPU响应和处理该中断过程如下:

7.351的中断处理过程(4)中断标志的清除

1)定时器溢出中断源的中断请求标志是自动撤除的,用户不用编写程序清除它们。 2)用户应在中断服务程序的适当位置处通过如下指令将中断标志撤除。 CLRTI;撤除发送中断 CLRRI;撤除接收中断若采用字节型指令,则也可采用如下指令:

ANLSCON,#0FCH;撤除发送和接收中断 3)外部中断请求的撤除: 外部中断源的中断请求请求是自动撤除的,用户不用编写程序清除它们。

7.4中断程序设计(5)外部中断引脚的清除

在下降沿触发方式下,外部中断标志IE0或IE1是依靠CPU两次检测或引脚上触发电平状态而确定的,即如果第一次检测到或引脚是高电平,第二次检测到或引脚是低电平,CUP就将外部中断标志IE0或IE1置1。因此通常情况下用户不用关心外部中断引脚,因为不会出现下降沿这种干扰信号(出现下降沿是用户所需要的)。在低电平触发方式下,外部中断标志IE0或IE1是依靠CPU检测或上低电平而置位的。尽管CPU响应中断时相应中断标志IE0或IE1能自动复位成“0”状态,但若外部中断源不能及时撤引脚上低电平(不是用户所需要的),就会再次使已经变成“0”的中断标志IE0或IE1置1,这是绝对不能允许的。因此,电平触发型外部请求的撤除必须使或上低电平随着其中断被CPU响应而变成高电平。

7.351的中断处理过程(1)中断初始化

中断系统初始化步骤如下:1)开相应中断源的中断;2)设定所用中断源的中断优先级;3)若为外部中断,则应规定低电平还是负边沿的中断触发方式。

7.351的中断处理过程(2)主程序的安排

由于单片机复位后PC=0000H,而在0003H-0023H为中断入口地址,为了避免单片机主程序覆盖中断入口地址的程序,往往在0000H处放一条跳转指令,跳转到真正存放主程序的地方:

ORG 0000H ;主程序入口地址

LJMP MAIN ORG 0003H ;中断程序入口地址

LJMP INT0_R ORG 0030H MAIN:…… ;主程序

7.351的中断处理过程(3)编程举例

【例7-2】如图所示,在INT0引脚(P3.2)上接一个按键开关,要求每按一次,P1口连接的8个发光二极管点亮位置下移一位,初态P1.0亮。

按下键输入低电平,没按下为高电平。设置边沿触发,下降沿有效。按键按下产生一个下降沿触发中断,在中断服务程序中对点亮位置左移。初始状态时P1口高电平亮灯,设P1的初值为00000001B=01H。程序如下:ORG 0000H ;主程序入口

LJMP MAIN ORG 0003H ;INT0入口

LJMP INT0_R ORG 0030HMAIN: MOV A,#01H ;初始状态

SETB EA ;开全局中断

SETB EX0 ;开INT0中断

SETB IT0 ;设下降沿触发LOOP: MOV P1,A ;输出 HERE: SJMP LOOP INT0_R: RL A ;中断服务程序

RETI ;中断返回上面的程序,主程序将在LOOP和HERE两句循环执行,等待按键产生中断后进入中断服务程序0003H处,然后跳转到INT0_R处执行真正的中断服务程序。在产生中断的一瞬间,具体是在LOOP或者HERE处产生中断,是随机的,因此中断返回的地址也是随机的。为了保证返回到LOOP处,可以采用修改中断返回点的方法,程序如下:ORG 0000H ;主程序入口

LJMP MAIN ORG 0003H ;INT0入口

LJMP INT0_R ORG 0030HMAIN: MOV A,#01H ;初始状态

SETB EA ;开全局中断

SETB EX0 ;开INT0中断

SETB IT0 ;设下降沿触发LOOP: MOV P1,A ;输出HERE; SJMP LOOPINT0_R: RL A ;中断服务程序

POPDPH POPDPL MOVDPTR#LOOP PUSHDPL PUSHDPH RETI ;中断返回上面的程序是为了让读者充分理解中断和堆栈的关系。如果在中断服务程序中加入一条语句,则可以避免中断返回的地址是随机的情况:ORG 0000H ;主程序入口

LJMP MAIN ORG 0003H ;INT0入口

LJMP INT0_R ORG 0030HMAIN: MOV A,#01H ;初始状态

SETB EA ;开全局中断

SETB EX0 ;开INT0中断

SETB IT0 ;设下降沿触发

MOV P1,A ;输出

SJMP $INT0_R: RL A ;中断服务程序

MOV P1,A RETI ;中断返回7.351的中断处理过程(3)课题:嵌入式打标机外围中断如图所示,在INT0引脚上每中断一次,CPU从P1.0-P1.3引脚读入开关状态,然后将开关状态从P1.4-P1.7引脚输出,以控制对应的灯。

单片机的P1.0-P1.3引脚接开关K1-K4作输入口,P1.4-P1.7接灯作输出口,P3.2(INT0)接K0作中断源。我们设置INT0低电平触发中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论