以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
51单片机中断系统硬件结构主要由以下几个部分组成:
-
中断源:包括外部中断(INT0、INT1)、定时器中断(T0、T1)和串口中断(RX、TX)。每个中断源都有一个对应的中断标志位,如TF0、TF1、RI、TI等。
-
中断允许控制寄存器IE:用于控制各个中断源是否允许中断。例如,EA为全局中断允许位,EX0、EX1分别为外部中断0和1的中断允许位。
-
中断优先级控制寄存器IP:用于设置各个中断源的优先级。例如,PX0、PX1分别为外部中断0和1的优先级设置位。
-
硬件查询电路:负责根据中断优先级和中断允许情况,确定当前最高优先级的中断源,并生成相应的向量地址。硬件查询电路内部通常包含排队器和向量地址形成部件。
中断系统的工作过程如下:
-
当某个中断源产生中断请求时,其对应的中断标志位会被置1。
-
如果该中断源允许中断(IE中的对应位为1),则硬件查询电路会将其纳入考虑范围。
-
硬件查询电路根据各中断源的优先级和中断允许情况,确定当前最高优先级的中断源。
-
硬件查询电路生成该中断源对应的向量地址,并将其送入程序计数器,从而实现程序跳转到相应的中断服务程序入口。
关于您提到的两个硬件查询电路,它们分别负责高优先级和低优先级的中断源。当有多个中断源同时发出请求时,高优先级硬件查询电路会优先处理高优先级的中断源,而低优先级硬件查询电路会处理剩余的低优先级中断源。在这种情况下,如果高优先级中断源的请求先被响应,那么在执行完高优先级中断服务程序后,才会处理低优先级中断源的请求。因此,不会产生两个向量地址。
中断嵌套是指在某个中断服务程序执行过程中,再次响应另一个更高优先级的中断请求。为了避免中断嵌套过深导致的问题,51单片机通常只允许一级中断嵌套。这可以通过在中断服务程序中关闭全局中断允许位(EA=0)来实现。这样,在执行当前中断服务程序的过程中,即使有更高优先级的中断请求产生,也不会立即响应,而是等待当前中断服务程序执行完毕后再进行处理。