作者:吴怡瑜故事_398 | 来源:互联网 | 2023-05-17 09:26
KEYUP1: LCALL DEL20ms
JB 02H,KEYOUT
LJMP INCSTEP
比如上面这段程序
每次执行到LCALL DEL20ms 时 ,程序就跑飞了,而有时就没问题,可正常执行,为什么?
还有,在子程序中要用到别的子程序,是不是不可用 LJMP 指令跳转,而应该用LCALL 指令调用?
请各位指教!!
11 个解决方案
可能是硬件问题。如果要调用子程序,则应该用acall或lcall指令。
按我的猜测,可能是使用LJMP造成的,可试一将LJMP改成LCALL。原因是在调用子程序时有压栈,退出子程序时有退栈,而你在调用子程序时用LJMP,跳转指令不压栈。当你调用的字里行间程序退出时,就退掉了不该退的栈数据,从而引起程序的跳飞。程序跳飞一般的原因都是由于堆栈产生的,比如是压栈指针没设合理,也会出现同样的问题。
看看你的仿真机与板的联接线吧,最大可能是联接线的总是了。
没见过,可能硬件和软件都可能有问题,一个一个排除!
堆栈出错了,我碰到过类似情况,一般来说,程序的第一句话就应该设置好堆栈的起点,调用子程序当然用lcall了!
在DEL20ms程序里的RET前面加三个NOP,在中间哪个NOP设置中断,看看到底什么原因
你的仿真器可以看到堆栈么??无论有没有,,在DEL20ms前后将堆栈读入一个区块RAM,用来作为调试用