单选题
1、中断查询确认后,在下列各种 AT89S51 单片机运行情况下,能立即进行响应的是( )
A
当前正在进行高优先级中断处理
B
当前正在执行 RETI 指令
C
当前指令是 MOV A, R3
D
当前指令是 DIV 指令,且正处于取指令的机器周期
答案解析
正确答案:C
解析:
这是一道关于 **AT89S51 单片机中断响应条件** 的经典题目。要解答此题,需要理解单片机在什么情况下会“封锁”中断,即暂时不响应新的中断请求。
### 核心知识点:中断响应的阻碍条件
AT89S51 单片机在以下三种情况下,即使有中断请求且未被屏蔽,CPU 也不会立即响应中断:
1. **正在执行同级或高优先级的中断服务程序**:
* 如果 CPU 正在处理一个中断,它不会被打断去处理另一个同级或低优先级的中断(除非发生嵌套,但题目问的是“立即响应”,通常指当前指令执行完后)。如果是高优先级中断正在运行,低优先级中断必须等待。
2. **当前指令未执行完**:
* CPU 只有在**当前指令执行的最后一个机器周期**结束后,才会查询中断标志并决定是否响应。因此,如果当前指令还在执行过程中(非最后阶段),中断会被挂起,直到该指令执行完毕。
3. **正在执行 `RETI` 或访问 `IE`、`IP` 寄存器的指令**:
* 这是 AT89S51 的特殊规定。当执行 `RETI`(中断返回)或者读写中断允许寄存器 `IE`、中断优先级寄存器 `IP` 时,CPU 内部逻辑会封锁中断查询。**必须等到下一条指令执行完毕后**,才能响应新的中断。这是为了防止在中断系统状态不稳定时发生错误嵌套或状态冲突。
---
### 选项逐一解析
* **A. 当前正在进行高优先级中断处理**
* **分析**:如果当前正在执行高优先级中断,说明 CPU 处于中断服务程序中。根据中断嵌套规则,低优先级中断不能打断高优先级中断;即使是同优先级,也不能打断。只有更高优先级的中断才可能嵌套(但题目未说明新中断的优先级更高,且通常“立即响应”指的是当前环境允许)。更关键的是,只要还在执行中断服务程序,当前的中断上下文尚未结束,新的中断请求通常需要等待当前指令(甚至整个服务程序,取决于优先级)完成。但在本题语境下,最直接的排除理由是:**正在执行中断服务程序期间,CPU 不会响应新的同级或低级中断**。
* **结论**:不能立即响应。
* **B. 当前正在执行 RETI 指令**
* **分析**:`RETI` 是中断返回指令。AT89S51 硬件规定,在执行 `RETI` 指令期间,以及紧随其后的**下一条指令**执行期间,中断系统是被关闭(封锁)的。这是为了确保中断返回后,主程序能至少执行一条指令,从而保证堆栈和现场的正确恢复,避免连续中断导致堆栈溢出或逻辑混乱。
* **结论**:不能立即响应,必须等下一条指令执行完。
* **C. 当前指令是 MOV A, R3**
* **分析**:`MOV A, R3` 是一条单字节、单机器周期的简单数据传送指令。
* 中断查询发生在每条指令的**最后一个机器周期**。
* 对于单机器周期指令,当它执行到最后一个机器周期(也就是它唯一的这个周期)时,CPU 会进行中断查询。如果此时有中断请求且满足条件,CPU 会在该指令执行完毕后(即下一个机器周期开始取中断向量地址时)立即响应。
* 相比于其他选项存在的“硬性封锁”或“长指令未完成”,这条指令执行时间短,且没有特殊的封锁机制,是最符合“能立即进行响应”条件的场景(意指当前指令结束后即可响应,无额外延迟)。
* **结论**:**能立即响应**(在当前指令结束后)。
* **D. 当前指令是 DIV 指令, 且正处于取指令的机器周期**
* **分析**:`DIV AB` 是一条多机器周期指令(通常为 4 个机器周期)。
* 题目明确指出当前处于“取指令的机器周期”,这意味着该指令刚刚开始执行,远未到达“最后一个机器周期”。
* CPU 只有在指令执行的**最后一个机器周期**才采样中断请求。因此,在取指阶段,即使有中断请求,CPU 也会继续执行完 `DIV` 指令的剩余周期,直到指令完全结束才会考虑响应中断。
* **结论**:不能立即响应,需等待 `DIV` 指令执行完毕。
### 总结
* **A** 受限于中断优先级和嵌套规则。
* **B** 受限于 `RETI` 指令后的特殊封锁期。
* **D** 受限于长指令尚未执行到查询点。
* **C** 是一条短指令,且无特殊封锁,在执行完当前机器周期(即指令结束)后即可查询并响应中断,是四个选项中响应延迟最小、最符合“立即响应”逻辑的情况。
因此,正确答案是 **C**。
相关知识点:
当前指令非DIV等可响应
题目纠错
单片机
相关题目
单选题
4、全家变量是在某一函数中存在的变量,它只在该函数内部有效。 ( )
单选题
3、在C51语言编程中,编写中断服务函数时需要考虑如何进行现场保护、阻断其他中断、返回时自动恢复现场等处理的程序段的编写。 ( )
单选题
2、在C51语言中,函数是一个完成一定相关功能的执行代码段,它与另外两个名词“子程序”和“过程”用来描述同样的事情。 ( )
单选题
1、C51语言处理单片机的中断是由专门的中断函数来处理的。 ( )
单选题
6、C51用“*”和“&”运算符来提取指针变量的( )和指针变量的( )。
判断
单选题
5、对于SMALL存储模式,所有变量都默认位于8051单片机( )。
单选题
4、C51提供了存储类型来访问( )。
单选题
3、C51提供了两种不同的数据存储类型( )和( )来访问片外数据存储区。
单选题
2、C51语言头文件包括的内容有8051单片机( )、( ),以及( )的说明。
单选题
1、与汇编语言相比,C51语言具有( )、( )、( )和( )等优点。
