请高手帮忙看看这段小程序,51单片机响应定时器0的中断程序后,需要大约15秒才能返回主程序断点处继续运行? 太奇怪了?这是什么原因? 用仿真器仿真也是这样的结果,肯定不是芯片的问题,我换了块新的芯片仍然有这种现象。请各位高手指点,谢谢大家。
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP D0
ORG 0030H
MAIN:
CLR P0.0;
MOV TMOD,#00000000B
MOV TH0,#0FFH
MOV TL0,#0FBH
SETB EA
SETB ET0
SETB TR0
LCALL DELAYTIME
CLR P1.0
LCALL DELAYTIME
SETB P1.0
LCALL DELAYTIME
CLR P1.0
LCALL DELAYTIME
SETB P1.0
CLR P1.3
SJMP $
D0:
CLR TR0
CLR P1.5
LCALL DELAYTIME
SETB P1.5
LCALL DELAYTIME
CLR P1.5
LCALL DELAYTIME
SETB P1.5
CLR P1.7
RETI
DELAYTIME:
MOV R0,#3
DELAYTIME1:
MOV R1,#0
DELAYTIME2:
MOV R2,#0
DJNZ R2,$
DJNZ R1,DELAYTIME2
DJNZ R0,DELAYTIME1
RET
END
又精确测试了一下,中断返回需要大约36秒才能返回到主程序继续运行,远远超出之前估计的15秒,我就是不理解,为什么中断返回需要这么长的时间,按理说应该很短暂的(应该就是几个机器周期而已啊)?
非常感谢,朋友!
请问朋友,您使用的是什么仿真器?
我的仿真器是硕飞的,无法仿真到这种程度,感觉我的这个仿真器不怎么好用,跟踪仿真的时侯无法检测到定时器0中断。
我用的是Proteus 仿真软件。要跟踪中断程序,你得在中断程序入口设一个断点,然后点全速运行,这样才会进入中断程序,否则单步执行是进不去中断的。