当前位置:首页>科技 >内容

单片机中断系统的概念_关于单片机的中断系统的详细介绍

2024-05-09 23:01:45科技漂亮的斑马

单片机中断系统的概念:中断是什么?我们从生活中的一个套路来介绍。你正在家里看书,突然电话响了。你放下书,接电话,和打电话的人说话,

单片机中断系统的概念_关于单片机的中断系统的详细介绍

单片机中断系统的概念:中断是什么?我们从生活中的一个套路来介绍。你正在家里看书,突然电话响了。你放下书,接电话,和打电话的人说话,然后放下电话,回来继续看你的书。这就是生活中的“中断”现象,即正常的工作过程被外界事件打断。仔细研究生活中的中断对我们学习单片机的中断也是非常有益的。

编号一、什么会导致中断?生活中的许多事件都会造成干扰:有人按门铃,电话铃响,你的闹钟响,你烧开的水开了.诸如此类。我们把那些能引起中断的事件称为中断源,在单片机中也有一些能引起中断的事件。8031中有五个事件:两个外部中断和两个计数。

No.二、中断的嵌套和优先级处理:想象一下,我们正在看书,电话响了,同时有人按门铃。你应该先做什么?如果你在等一个重要的电话,你通常不会注意门铃。相反,如果你在等一个重要的客人,你可能不会注意电话。如果不是这两种(也就是不等电话,不等人上门),你可能会按照你平时的习惯来处理。总之这里有个优先级问题,单片机也是,也有个优先级问题。优先级的问题不仅发生在两个中断同时发生的时候,还会发生在一个中断已经发生而另一个中断已经发生的时候,比如你正在接电话,有人按门铃,或者你正在开门和人说话,电话又响了。想想我们要做什么。

三、号中断响应流程:当事件发生时,我们首先要记住我们现在正在读的书的哪一页,或者在当前页的位置放一个书签,然后处理不同的事情(因为处理完之后我们会回来继续读):电话响了我们会去放电话的地方,门铃响了我们会去开门,这意味着我们会有不同的中断。计算机也采用这种方法。每个中断产生后,五个中断源去一个固定的地方寻找处理这个中断的程序。当然,在去之前,要先保存下一条要执行的指令的地址,这样在处理完中断之后,他们就可以回到原来的地方继续执行程序了。具体来说,中断响应可分为以下步骤:

1、保护断点就是保存下一条要执行的指令的地址,也就是把这个地址发送到堆栈。

2、找到中断入口,根据五个不同中断源产生的中断找到五个不同的入口地址。以上工作由计算机自动完成,与程序员无关。中断处理程序存储在这五个入口地址(这是写程序时放在那里的。如果中断程序没有放在那里,那就是错误的,中断程序无法执行)。

3、执行中断处理程序。

4、中断返回:中断指令执行后,从中断点返回主程序继续执行。单片机到底是怎么找到中断程序的位置,又是怎么返回的?我们以后再谈。

MCS-51单片机中断系统的结构:

五个中断源的符号、名称和条件如下。

INT0:外部中断0,由引入P3.2端口线、低电平或跳沿引起。INT1:外部中断1,由引入P3.3端口线、低电平或跳沿引起。T0:定时器/计数器0中断,是由T0计数回零引起的。T1:定时器/计数器L中断,由T1归零引起。Ti/RI:串行I/O中断,在串口完成发送/接收一帧字符后产生。

整个中断系统的框图如下图1所示。

51单片机中断系统结构

如图所示,它由与中断、中断条目、序列查询逻辑电路等相关的特殊功能寄存器组成。包括五个中断请求源,以及用于中断控制的四个寄存器IE、IP、ECON和SCON,以控制中断类别、中断的开和关以及各种中断源的优先级确定。

中断请求源:

(1)外部中断请求源:外部中断0和1,通过外部引脚引入。单片机上有两个管脚,即P3P3管脚。2、P3.3 .内部TCON中的四位与外部中断相关。IT0:触发模式的控制位可以通过软件设置和复位。IT0=0,IT0为低电平触发模式,IT0=1,INT0为负跳变触发模式。这两种方法的区别将在后面讨论。IE0:INT0中断请求标志位。当有外部中断请求时,该位将被置1(这由硬件完成)。CPU响应中断后,硬件将清除IE0。IT1、IE1与IT0和IE0用途相同。

(2)内部中断请求源TF0:定时器T0的溢出中断标志。当T0计数溢出时,TF0由硬件设置。当CPU响应中断时,TF0被硬件清除。TF1:类似于TF0。TI,RI:串口发送和接收中断,会在串口中解释。2、中断使能寄存器IE在MCS-51中断系统中,中断的使能或禁用由8位中断使能寄存器IE控制,该寄存器可在芯片上进行位寻址。EAX见下表

其中EA是主开关,如果它等于0,则不允许所有中断。es-串口中断使能ET1 -定时器1中断使能EX1 -外部中断1中断使能。ET0 -定时器0中断使能EX0 -外部中断0中断使能。如果我们要允许外部中断1,定时器1中断允许,其他不允许,即可以是EAX。也就是8CH。当然,我们也可以使用SETB EA的位操作指令。

SETB ET1SETB EX1来实现它。

3、五个中断源和中断的自然优先级外部服务入口地址0: 0003h定时器0: 000bh外部中断1: 0013h定时器1: 001bh串口:0023H它们的自然优先级从高到低排列。写到这里,你应该明白为什么前面有一些程序一开始要这样写:

组织0000HLJMP开始

ORG 0030H

开始:

这样写的目的是放弃中断源所占用的向量地址。当然,在程序没有中断的情况下,直接从0000H开始写程序原则上没有错,但实际工作中最好不要这样做。优先级:MCU采用自然优先级和手动设置高低优先级的策略,即程序员可以设置哪些中断是高优先级,哪些中断是低优先级。因为只有两级,所以一定会有一些同级的中断,而同级的中断是由自然优先级决定的。

启动时,每个中断都处于低优先级,我们可以用指令来设置优先级。看表2。中断优先级由中断优先级寄存器IP设置为高。如果IP中的某个位设置为1,则相应的中断为高优先级,否则为低优先级。

xx

X

附言(同postscript);警官(police sergeant)

PT1

PX1

PT0

PX0

例:设置如下要求:设置T0和外部中断1为高优先级,其他为低优先级,求IP的值。IP的前3位是没用的,可以取任意值,设为000,然后按要求写XX。

所以最后IP的值是06H。例子:在上面的例子中,如果五个中断请求同时发生,求中断响应的顺序。响应顺序为:定时器0->外部中断1->外部中断0->实时中断1->串行中断。

MCS-51单片机的中断响应过程:

1、中断响应的条件:在这一点上,我们仍然惊叹于计算机对中断的响应。我们可以对外部事件做出反应,因为我们有各种各样的“传感器”——眼睛和耳朵可以接收不同的信息。计算机是如何做到这一点的?其实说白了,一点都不奇怪。MCS51工作时,会在每个机器周期检查每个中断标志,看它们是否为“1”。如果都是1,说明有中断请求,所以所谓的中断其实就是查询,只是每个周期检查一次。对于成年人来说,这就相当于你在看书的时候每秒钟都要抬头看看,问是不是有人按门铃,有电话.很蠢,不是吗?

但是电脑就是这样,根本没人聪明。了解了上面的中断过程,就不难理解中断响应的条件了。在以下三种情况之一时,CPU将阻止对中断的响应:

CPU正在处理同一级别或更高级别的中断请求。

当前机器周期不是当前正在执行的指令的最后一个周期。我们知道,单片机有单周期、双周期、三周期指令,电流指令是不是单字节无关紧要。如果是双字节或者四字节,那就要等到整个指令执行完之后才能响应中断(因为每个机器周期都可以找到中断查询)。

当前正在执行的指令是返回批处理指令(RETI)或访问IP或IE寄存器的指令,那么只有当CPU至少再执行一条指令时才应该被中断。这些都和中断有关。如果你正在访问IP或IE,你可能会打开或关闭中断,或者改变中断的优先级,而中断返回指令意味着中断还没有被处理,所以你要等到这个指令被处理后,再执行另一个指令来响应中断。

2、中断响应过程当CPU响应一个中断时,首先将当前指令(即中断返回后要执行的指令)的下一条指令的地址发送到堆栈,然后根据中断标志将相应的中断入口地址发送到PC。PC是程序指针,CPU根据PC里的值取指令,PC里的值是什么,程序就会去中断入口继续执行。这些任务都是硬件完成的,我们不用去想。这里还有一个问题。大家有没有注意到每个中断向量地址只隔了8个单位,比如0003-000B?如何在这么小的空间内完成中断程序?很简单。如果在中断处安排一条LJMP指令,是不是就不能把中断程序跳转到任何地方了?一个完整的主程序应该是这样的:

组织0000HLJMP开始

ORG 0003H

LJMP INT0输出中断0ORG 000BH

RETI;定时器0不是用来中断的,所以在这里放一个RETI。万一“意外”中断,也不会有什么大的后果。

中断程序完成后,必须执行RETI指令。执行完这条指令后,CPU会取出存储在堆栈中的地址,并发送给PC,这样程序就会从主程序的中断点继续执行。注意:CPU所做的保护工作是非常有限的,只有一个地址受到保护,其他的都不受保护。所以,如果用a,PSW等。在主程序中,你需要在中断程序中使用它们,并确保在返回主程序后,里面的数据仍然不是中断前的数据,你得自己保护它。

中断系统的控制寄存器:

中断系统有两个控制寄存器IE和IP,用于设置每个中断源的开/关和中断优先级。此外,TCON中还有4个其他位用于选择引起外部中断的条件,并用作标志位。

1.中断允许寄存器- IE

即在特殊功能寄存器中,字节地址为A8H,位地址(从低到高)分别为A8H-AFH。

IE用于打开或关闭来自各种中断源的中断请求。基本格式如下图2所示:

EA:全局中断使能位。EA=0,关闭所有中断;EA=1,全局中断控制开启。在这种情况下,每个中断控制位决定相应的中断是打开还是关闭。:无效位。ES:串行I/o中断使能位。Es=1,打开串行I/O中断;Es=0,关闭串行I/O中断。ETl定时器/计数器1中断使能位。ETL=1,开启T1中断;Etl=o,关闭T1中断。EXl:外部中断l中断启用位。Exl=1,open int 1;Exl=0,close INT1。ET0:定时器/计数器0中断使能位。ET0=1,打开T0中断;Et0=0,关闭中断。EXO:外部中断0中断使能位。Ex0=1,open INT0EX0=0,关闭INT0。

中断优先级寄存器- IP:

在特殊功能寄存器中,IP的字节地址为B8H,位地址(从低到高)分别为B8H-bfh。IP用于设置每个中断源属于两级中断中的哪一级。IP的基本格式如下图3所示:

:无效位。PS:串行I/O中断优先级控制位。Ps=1,高优先级;Ps=0,低优先级。PTl:定时器/计数器1中断优先级控制位。Ptl=1,高优先级;Ptl=0,低优先级。Pxl:外部中断1中断优先级控制位。PXL=1,高优先级;Pxl=o,低优先级。PT0:定时器/计数器O中断优先级控制位。PT0=1,高优先级;PTO=0,低优先级。Px0:外部中断0中断优先级控制位。Px0=1,高优先级;Px0=0,伤害优先。在MCS-51单片机系列中,高级中断可以中断低级中断,形成中断嵌套;同级中断之间,或者低级和高级中断之间不能形成中断嵌套。如果同一级别的几个中断同时向CPU请求中断响应,则CPU按以下顺序确定响应顺序:

INT0-T0 - INT1-T1-ri/t1。

中断响应过程

如果一个中断源是通过编程设置的,它处于打开状态,满足中断响应的条件,当前正在执行的指令已经执行。

1、在当前周期结束时响应同级或高级中断2、没有在操作IE、IP中断控制寄存器或执行REH指令,则微控制器响应此中断。

正常情况下,从中断请求信号的有效开始到中断的响应通常需要3到8个机器周期。中断响应后,中断请求标志(串口I/O口的中断标志要用软件清零)自动清零,断点即程序计数器(PC)的值被压入堆栈(用于恢复);然后将相应的中断入口地址加载到PC机中,这样程序就可以转移到相应的中断服务程序中执行。

程序存储器中每个中断源的中断入口地址如下:

中断源入口地址INT0(外部中断0) 0003HTF0(要中断)000BHINT1(外部中断1) 0013HTFl(T1中断)001bhri/Ti(串口中断)0023H。

由于每个中断入口的地址彼此非常接近,不方便存储每个较长的中断服务程序,所以通常在中断入口地址的开头安排两个或三个单元的转移指令,以转移到安排在那里的中断服务程序。以T1中断为例,流程如图4所示。

由于五个中断源中的每一个都有其中断请求标志0、TF0、IEl、TFl和RI/Ti,所以当中断源满足中断请求时,每个标志自动设置为1,以向CPU请求中断。如果中断源发出中断请求,CPU不能立即响应。只要中断请求标志没有被软件手动清除,中断请求的状态将一直保持,直到CPU对中断做出响应。对于串行端口中断,这个过程不同于其他四个中断。即使CPU响应中断,其中断标志RI/TI也不会自动清零,只有在中断服务程序中设置了清除RI/TI的指令后,才会再次发出中断请求。

CPU的现场保护和恢复必须由相应的中断服务程序来完成。当执行RETI中断返回指令时,断点值自动从堆栈的前2个字节弹出并加载到PC寄存器中,这样CPU就可以继续执行被中断的程序。

下面给出了一个应用定时器中断的例子。

现在需要编写一个程序来输出一个周期为

1、方法:定时器T0用于1ms计时,当达到计时值时,引起中断。在中断服务程序中,P1.0的状态反转一次,再次计时1ms。

2、计时初始值:机器周期MC=12/FOSC=2 us。因此,计时lms所需的机器周期数为500D,即0lF4H。设T0为工作模式1(16位模式),则初始时序值为(01F4H)补码==FEOCH。

串行端口的控制寄存器:

串口有两个控制寄存器,SCON和PCON,用于设置串口的工作模式、接收/发送的操作状态、接收/发送数据的特征、波特率和操作的中断标志。

串口控制寄存器SCONSCON的字节地址为98H,位地址(从低位到高位)分别为98H-9FH。SCON的格式如图5所示。

SMo,SMl:串口工作模式的控制位。00-模式0;01-模式1;10-模式2;11-模式3。SM2:仅用于模式2和模式3下的多机通信控制位发送器SM2=1(需要程控设置)。当是模式2或模式3时:当接收机SM2=1时,如果Rb8=1,串行接收可以中断;如果Rb8=0,将不会导致串行接收中断。当sm2=0时,如果Rb8=1,可以引起串行接收中断;如果Rb8=0,也会导致串行接收中断。REN:串行接收使能位。0-禁止接收;1-允许接收。TB8:在模式2和3中,TB8是发送器要发送的第9位数据。RB8:在模式2和模式3中,RB8是接收机接收到的第9位数据,它来自发射机的TB8。TI:发送中断标志位。发送前必须软件清零,发送过程中TI保持零电平。发送一帧数据后,由硬件自动设置。如果要再次发送,必须使用软件重置。RI:接收中断标志位。在接收之前,必须通过软件清除。在接收期间,RI保持零电平。接收到一帧数据后,它会由片内硬件自动设置。如果你想再次收到它,你必须使用软件重置它。

功率控制寄存器PCON

PCON的字节地址是87H,没有位地址。PCON的格式如图6所示。需要指出的是,PCON对80C31单片机有几个有效的控制位。

SMOD:波特率双位。计算串行模式1、2和3的波特率时;0-非双精度;1倍。

串行中断的应用特征:

8031单片机的串行I/O口为中断源,有两个中断标志RI和TI,RI用于接收,TI用于发送。

无论串口的工作模式是什么,在发送/接收之前,Ti/RI都必须清零。当发送/接收一帧数据时,TI/RI自动设置为1。如果要再次发送/接收,必须先通过软件清除。

在串行中断开启的情况下,对于模式0和模式1,发送/接收一帧数据后,除了设置TI/RI,还会引起一个串行中断请求,执行串行中心服务程序。然而,对于模式2和模式3中的接收器,RI是否置位以及串行中断是否打开取决于SM2和RB8的状态:

SM2 RB8接收器中断标志和中断状态0 1激活RI,导致中断1 0不激活RI,不导致中断1 1激活RI,导致中断。

单片机就是利用模式2和模式3的这种特性来实现多台计算机之间的通信。串口的常用应用方法可以在相关章节中找到。

波特率的确定:

对于模式0,波特率固定为FOSC/12,波特率随外部晶振的频率而异。常用的fosc是12MHz和6MHz,所以波特率分别是1000103和500103 bits/s。这样,数据将以固定的波特率自动发送/接收,根本不用设置。

对于模式2,波特率计算为2Smod FOSC/64。smod=0时,波特率为FM/64;当smod=1时,波特率为FOSC/32。这样,波特率是由程序控制设置SMOD位的状态后确定的,不需要其他设置。

对于模式1和模式3,波特率计算为2SMOD/32T1溢出率,有两种波特率:TL/32溢出率和T1/16溢出率,具体取决于SMOD状态位。因为T1溢出速率的设置比较方便,所以波特率的选择会非常灵活。

如前所述,定时器Tl有四种工作模式。为了在不进入中断服务程序的情况下得到其溢出率,往往将T1设置为工作模式2的运行状态,即时间常数自动加8位。因为这样一来,T1的溢出率(每秒次数)就可以表示为:

主程序和中断服务程序的下一节是通过串行模式L从数据00H开始连续不断地发送一条数据的程序示例.设单片机晶体振荡器的频率为6MHZ,波特率为1200比特/秒。

声明本站所有作品图文均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系我们

Top