在程序运行到任何地方时,发生中断,则中断当前的程序运行,去响应中断,那么CPU自动取得中断入口地址并转入执行中断程序,同时保存当前的程序地址,当中断程序执行完后,将返回被保存的程序地址处,继续执行被中断了的程序。
中断响应的主要过程是首先由硬件自动生成一条长调用指令LCALL addr16。
这里的addr16就是程序存储区中的相应的中断入口地址。
例如,对于外部中断1的响应,产生的长调用指令为:
LCALL 0013H
生成LCALL指令后,紧接着就由CPU执行该指令。首先是将程序计数器PC的内容压入堆栈以保护断点,再将中断入口地址装入PC,使程序转向响应中断请求的中断入口地址。
各中断源服务程序的入口地址是固定的,如下所示:
外部中断0 0003H
定时/计数器T0 000BH
外部中断1 0013H
定时/计数器1 001BH
串行口中断 0023H
000bh
如:
org
0000h
ajmp
start
org
000bh
;t0中断地址入口
ajmp
int_t0
;转到真正的处理程序处
org
30h
51单片机的各自中断入口:
int0
0003h
int1
0013h
t0
000bh
t1
001bh
s
0023h