按道理说AT89C51的P1口和地址的90H是映射的!但是在中断函数里面写上如下代码:INT0P: ;外部中断0中断函数
PUSH P1
MOV P1, #0F6H
MOV R2, #30
DELAY0:
LCALL DELAY
DJNZ R2, DELAY0
POP P1
RETI
刚刚进入中断的时候P1的值为0F3H,但是中断返回时P1的值并没有回到0F3H,而是保持在0F6H,也就是说POP P1并没有执行成功,弹栈没有执行成功!!但是,我们在
之前加上一条语句,如下
则弹栈可以成功,70H地址处的值被成功为0F3H,不知道这是什么问题!!!Keil编译器的Bug还是????求大侠解决
实际情况如下图::
刚进入中断时的状态:
中断函数执行完毕,将要执行POP P1时的状态:
执行POP P1后的状态:(注意,这里执行后90H和P1寄存器的值都没有改变)
若弹栈,把值谈到70H中,则可以弹栈成功,如下图:
求大虾解释!!!! |