MCS-51单片机的某系统有三个外部中断源 1、2、3,当某一中断源变低电平时便要求 CPU 处理,它们的优先处理次序由高到低为 3、2、1,处理程序的入口地址分别为 2000H、2100H、2200H。试编写主程序及中断服务程序(转至相应的入口即可)。
时间: 2024-10-27 22:11:54 浏览: 25
合工大MCS-51单片机题库.doc
MCS-51单片机的中断处理通常需要设置中断优先级寄存器(IP)来控制中断源的优先级,并在适当的中断服务程序入口地址上放置相应的跳转指令。由于你给出的优先级是3>2>1,我们需要按照这样的顺序来编写程序。
**主程序(Main Program)**:
```assembly
org 0x0000 ;主程序的起始地址
; 开启全局中断
cli ;清零中断标志(保留给低优先级)
; 设置中断优先级:先处理第3级中断
mov iph, #0x07 ;IPH = 7(最高位)
mov ip, #0x00 ;IP = 0,表示当前级别(低优先级)
loop:
jmp loop ;主程序无限循环,等待中断
; 中断服务程序入口地址
iret ;当中断被触发时,CPU将自动转到对应级别的中断处理函数
; 外部中断入口地址
org 0x2200 ;中断1入口(最低优先级)
jmp interrupt_1
org 0x2100 ;中断2入口
jmp interrupt_2
org 0x2000 ;中断3入口(最高优先级)
interrupt_3:
jmp interrupt_handler_3
org 0x2200 ;中断1实际处理程序
interrupt_1:
jmp interrupt_handler_1
org 0x2100 ;中断2实际处理程序
interrupt_2:
jmp interrupt_handler_2
; 实际中断处理程序
interrupt_handler_3:
; 进行中断3处理,处理完后返回到主程序
reti
interrupt_handler_2:
; 中断2处理...
reti
interrupt_handler_1:
; 中断1处理...
reti
```
在这个程序中,`loop`是主程序的无限循环,中断标志清零防止CPU在此期间被低优先级的中断打断。每种中断在各自的入口地址处都有一个跳转到实际的中断处理程序的指令。
阅读全文