51单片机中断中的断点地址问题,坐等!!!!

资料上说CPU响应中断时首先把当前指令的下一条指令 就是中断返回后将要执行的指令的地址断点地址送入堆 栈,我想问的是这个地址是唯一的吗?还是不同指令处 有不同的地址? 比如说主程序由8个指令组成, 标记为12345678,假如执行2指令以后发 生中断,那么就将3指令放到了中断地址里 面,假如执行3指令以后,发生了中断,那 么就将4指令放到了中断地址里,前后的两 个中断地址一样吗?

你没有理解中断吧,中断地址是由中断向量表定好了,51的:0003H 是INT0中断地址, 0000B是T0中断地址。。。 共5个,书上有的。 而对于你说的当前地址的下一条存到堆栈,其实就是把PC的值保存到堆栈,而堆栈指针(SP)由你初始化时定的,一般是给30H(复位后是07),每要压入一个时先加1(如果当前时30H,那PUSH ACC 后,其实ACC的值存在了31H)追问

也就是是将执行完的下一条指令保存到 堆栈当中的地址里面去了,如果只执行INTO,那么我所说的这两个地址应该是同一个地址。

追答

如果之前没有其它的中断的话,两个的地址是一样的,这个由硬件来做 用汇编的话,只要加 PUSH和POP指令就行了

追问

外请教下,假如主程序执行完以后,我人为的给INTO一直低电平,那么中断程序还会继续吗?

追答

INT0有两个中方式,如果是低电平触发,而你一直给低,可能就会跑死掉了,只要你的程序没有跑飞,符合中断信号就会产生中断。 在单片机里,主程序都有一个死循环的,只要开了中断,什么时候都可以进来。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-14
不一样。一个指令一个地址。追问

假如触发中断是由低电平决定,那么这个低电平是人为的,还是通过指令完成的,还是硬件自己完成的,先谢谢了!

追答

通过指令完成。比如下面的一个实验的程序:
实验四 利用中断控制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

相似回答