考虑一下我们会做什么。 三、中断响应过程:当事件发生时,在进入中断之前,我们首先要记住我们现在正在看书的哪一页,或者在当前页上打上书签,然后处理不同的事情(因为处理完了,我们必须回来继续阅读):当电话铃响时,我们必须去电话所在的地方,当门铃响时,我们必须去门口。 也说是不同的中断,我们要在不同的地方去处理。 这个位置通常仍然是固定的。 这种方法也用于计算机中。 有五个中断源。 每次中断产生后,都会去固定的地方寻找处理该中断的程序。 当然,去之前,首先要保存下面要执行的指令的地址,以供处理。 中断后返回原处继续执行程序。 具体来说,中断响应可以分为以下步骤: 1、保护断点,即保存下一条要执行的指令的地址,并将该地址送入堆栈。 2、查找中断入口,根据5个不同中断源产生的中断,找到5个不同的入口地址。 以上工作由计算机自动完成,与程序员无关。 这5个入口地址存放的是中断处理程序(这个是写程序的时候就放在那里的,如果中断程序不放在那里就是错误的,中断程序无法执行)。 3. 执行中断处理程序。 4、中断返回:执行完中断指令后,从中断点返回主程序继续执行。 单片机如何找到中断程序的位置,又如何返回? 我们稍后再讨论这个问题。
MCS-51单片机中断系统的结构:五个中断源的符号、名称及产生条件如下。 INT0:外部中断0,由P3.2端口线引入,由低电平或下降沿引起。 INT1:外部中断1,由P3.3端口线引入,由低电平或下降沿引起。 T0:定时器/计数器0中断,由T0溢出并归零引起。 T1:定时器/计数器l中断,由T1完全归零引起。 TI/RI:串行I/O中断,串口完成一帧字符的发送/接收后产生。 整个中断系统的结构框图如下图1所示。 如图所示,它由与中断相关的特殊功能寄存器、中断入口、顺序查询逻辑电路等组成,其中包括5个中断请求源,以及4个中断控制寄存器IE、IP、ECON和SCON,用于控制中断类型。 打开和关闭中断并确定各种中断源的优先级。 中断请求源: (1)外部中断请求源:外部中断0和1,通过外部引脚引入,单片机上有两个引脚,命名为INT0、INT1,即P3.2、P3.3这两个引脚。 内部TCON中有四个与外部中断相关的位。 IT0:INT0触发模式控制位,可由软件设置和复位。 IT0=0,INT0为低电平触发模式,IT0=1,INT0为负跳变触发模式。 稍后将讨论这两种方法之间的差异。 IE0:INT0中断请求标志位。 当有外部中断请求时,该位将被设置为1(这是由硬件完成的)。 CPU响应中断后,硬件将IE0清0。
IT1和IE1与IT0和IE0具有相同的用途。 (2) 内部中断请求源TF0:定时器T0 的溢出中断标志。 当T0计数溢出时,TF0由硬件置位。 当CPU响应中断时,TF0被硬件清0。 TF1:与 TF0 类似。 TI、RI:串口发送和接收中断,这个会在后面串口中解释。 2. 中断允许寄存器IE 在MCS-51 中断系统中,中断的允许或禁止由片内可位寻址的8 位中断允许寄存器IE 控制。 参见下表 EAX,其中 EA 为主开关,如果等于 0,则不允许所有中断。 ES——串口中断使能 ET1——定时器1中断使能 EX1——外部中断1中断使能。 ET0 – 定时器 0 中断启用 EX0 – 外部中断 0 中断启用。 如果我们想设置允许外部中断1,允许定时器1中断,不允许其他中断,那么IE可以是EAX或8CH。 当然,我们也可以使用位操作指令SETB EASETB ET1SETB EX1来实现。 3、五个中断源的自然优先级及中断服务入口地址。 外部中断0:0003H。 定时器 0:000BH。 外部中断1:0013H。 定时器 1:001BH。 串口:0023H。 他们的自然优先级是从高到低排列的。 。 到这里,大家应该明白为什么我们最初要写一些这样的程序了:ORG 0000HLJMP STARTORG 0030HSTART:。
写这个的目的是为了让出中断源占用的向量地址。 当然,当程序没有中断的时候,直接从0000H开始写程序原则上没有什么问题,但在实际工作中最好不要这样做。 优先级:单片机采用自然优先级和手动设置高低优先级的策略,即程序员可以设置哪些中断为高优先级,哪些中断为低优先级。 由于只有两个级别,所以肯定有一些中断,同一级别的中断是由自然优先级决定的。 启动时,每个中断的优先级都较低,我们可以使用指令来设置优先级。 从表 2 可以看出,中断优先级由中断优先级寄存器 IP 设置为高。 如果IP中的某位设置为1,则对应的中断为高优先级,否则为低优先级。 XXXPSPT1PX1PT0PX0 示例:假设如下要求,将T0和外部中断1设置为高优先级,其他设置为低优先级。 求IP的价值。 IP的前3位无用,可以设置为000,然后根据需要写入即可。 XX。 因此,最终IP的值为06H。 举例:上例中,如果同时发生5个中断请求,求中断响应的顺序。 响应顺序为:定时器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指令,中断程序不就可以跳转到任何地方了吗? 一个完整的主程序应该是这样的: ORG 0000HLJMP STARTORG 0003HLJMP INT0; 转移到外部中断0ORG 000BHRETI; 没有使用定时器0中断,这里放一个RETI,万一“不小心”产生中断,也不会产生太多后果。 。 中断程序完成后,必须执行RETI指令。 执行完这条指令后,CPU会取出栈中保存的地址并发回给PC。 然后程序将从主程序的中断点继续执行。 注意:CPU所做的保护工作非常有限,只保护一个地址,其他的都不保护,所以如果在主程序中使用了A、PSW等,需要在中断程序中使用他们还需要确保返回主程序后,那里的数据仍然是执行中断之前的数据,所以他们必须保护自己。 中断系统控制寄存器:中断系统有两个控制寄存器IE和IP,分别用于设置每个中断源的开/关和中断优先级。 另外,TCON 中的另外 4 位用于选择引起外部中断的条件,并作为标志位。
1、中断使能寄存器-IEIE位于特殊功能寄存器中,字节地址为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=0,关闭T1中断。 EXl:外部中断l中断允许位。 EXl=1,打开INT1; EXl=0,关闭INT1。 ET0:定时器/计数器0中断允许位。 ET0=1,开启T0中断; ET0=0,关闭TO中断。 EXO:外部中断0中断使能位。 Ex0=1,打开INT0; EX0=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=0,低优先级。 PT0:定时器/计数器中断优先级控制位。 PT0=1,高优先级; PTO=0,低优先级。 Px0:外部中断0中断优先级控制位。 px0=1,高优先级; Px0=0,伤害优先。 在MCS-51单片机系列中,高层中断可以打断低层中断,形成中断嵌套; 同一级别的中断之间、低级别中断与高级中断之间不能形成中断嵌套。如果同一级别的多个中断同时向CPU请求中断响应,则由CPU决定中断中响应的顺序。以下顺序:继续阅读