某系统有三个外部中断源IR1、IR2、IR3,当某一中断源低电平时,便通过(INT0) ̅要求CPU进行处理,它们的优先处理次序由高到低为IR3、IR2、IR1。三个外部中断源IR1、IR2、IR3对应的中断处理程序的入口地址分别为3800H,3A00H,3C00H。试画出电路连接示意图,并编写主程序及中断服务子程序(转至相应的中断处理程序的入口即可)。
时间: 2024-02-12 17:07:16 浏览: 208
以下是电路连接示意图:
```
+------------+
| |
| IR1 |---+
| | |
+------------+ |
|
+------------+ |
| | |
| IR2 |---+---+
| | | |
+------------+ | |
| |
+------------+ | |
| | | |
| IR3 |---+---+--- CPU
| | | |
+------------+ | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
+---+
```
以下是示例代码:
```c
#include <reg52.h>
void ir1_isr() interrupt 0x03
{
// 执行IR1对应的中断处理程序
goto _ir1;
}
void ir2_isr() interrupt 0x0B
{
// 执行IR2对应的中断处理程序
goto _ir2;
}
void ir3_isr() interrupt 0x13
{
// 执行IR3对应的中断处理程序
goto _ir3;
}
void main()
{
EA = 1; // 开启总中断
while (1)
{
// 主程序
}
_ir1:
// IR1对应的中断处理程序
goto _exit;
_ir2:
// IR2对应的中断处理程序
goto _exit;
_ir3:
// IR3对应的中断处理程序
_exit:
// 退出中断处理程序
ET0 = 0; // 关闭定时器0中断,避免中断嵌套
}
```
在主程序中,我们只是一个简单的死循环,不做任何操作。在中断服务程序中,我们根据不同的中断源跳转到相应的中断处理程序入口处执行,并在最后关闭定时器0中断以避免中断嵌套。注意,在跳转到中断处理程序入口处之前,需要先关闭定时器0中断避免中断嵌套。
阅读全文