资料上说CPU响应中断时首先把当前指令的下一条指令 就是中断返回后将要执行的指令的地址断点地址送入堆 栈,我想问的是这个地址是唯一的吗?还是不同指令处 有不同的地址? 比如说主程序由8个指令组成, 标记为12345678,假如执行2指令以后发 生中断,那么就将3指令放到了中断地址里 面,假如执行3指令以后,发生了中断,那 么就将4指令放到了中断地址里,前后的两 个中断地址一样吗?
也就是是将执行完的下一条指令保存到 堆栈当中的地址里面去了,如果只执行INTO,那么我所说的这两个地址应该是同一个地址。
追答如果之前没有其它的中断的话,两个的地址是一样的,这个由硬件来做 用汇编的话,只要加 PUSH和POP指令就行了
追问外请教下,假如主程序执行完以后,我人为的给INTO一直低电平,那么中断程序还会继续吗?
追答INT0有两个中方式,如果是低电平触发,而你一直给低,可能就会跑死掉了,只要你的程序没有跑飞,符合中断信号就会产生中断。 在单片机里,主程序都有一个死循环的,只要开了中断,什么时候都可以进来。
假如触发中断是由低电平决定,那么这个低电平是人为的,还是通过指令完成的,还是硬件自己完成的,先谢谢了!
追答通过指令完成。比如下面的一个实验的程序:
实验四 利用中断控制LED灯
ORG 0000H
LJMP MAIN
ORG 0003H ;外中断程序入口
LJMP EXINT0
ORG 0300H
MAIN:
SETB EA;开所有中断
SETB EX0;开INT0中断
SETB IT0;负边沿引起中断 可以用MOV IE,#81代替上述3条语句
CLR P1.0
MOV R3,#20 ;脉冲数
SJMP $
EXINT0:
DJNZ R3,NEXT
MOV R3,#20
CPL P1.0
NEXT: RETI