热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

程序为什么总跑飞?

KEYUP1:LCALLDEL20msJB02H,KEYOUTLJMPINCSTEP比如上面这段程
KEYUP1:       LCALL DEL20ms
              JB    02H,KEYOUT
              LJMP  INCSTEP   
比如上面这段程序
   每次执行到LCALL DEL20ms  时 ,程序就跑飞了,而有时就没问题,可正常执行,为什么?
   还有,在子程序中要用到别的子程序,是不是不可用 LJMP 指令跳转,而应该用LCALL 指令调用?
   请各位指教!!

11 个解决方案

#1


不是程序问题
调试工具的问题,注意相关设置选项

#2


可能是硬件问题。如果要调用子程序,则应该用acall或lcall指令。

#3


按我的猜测,可能是使用LJMP造成的,可试一将LJMP改成LCALL。原因是在调用子程序时有压栈,退出子程序时有退栈,而你在调用子程序时用LJMP,跳转指令不压栈。当你调用的字里行间程序退出时,就退掉了不该退的栈数据,从而引起程序的跳飞。程序跳飞一般的原因都是由于堆栈产生的,比如是压栈指针没设合理,也会出现同样的问题。

#4


我和zys0001想法一样。


























#5


我感觉也应该是仿真器的事 就是你的程序没有设置好

#6


看看你的仿真机与板的联接线吧,最大可能是联接线的总是了。

#7


没见过,可能硬件和软件都可能有问题,一个一个排除!

#8


堆栈出错了,我碰到过类似情况,一般来说,程序的第一句话就应该设置好堆栈的起点,调用子程序当然用lcall了!

#9


是不是你的 DEL20ms  

根本就没有

#10


在DEL20ms程序里的RET前面加三个NOP,在中间哪个NOP设置中断,看看到底什么原因

#11


你的仿真器可以看到堆栈么??无论有没有,,在DEL20ms前后将堆栈读入一个区块RAM,用来作为调试用

推荐阅读
author-avatar
吴怡瑜故事_398
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有