我的程序跑飞了,总是调用不相关的程序,为何?

2020-02-09 11:41发布

现在有个问题就是我有一个子程序,假如是LOOP35,我有两个地方调用它,但是程序实际运行时不止两个地方调用,所以造成其它地方有多余显示,我把它搬到内存其它位置也是出现同样情况,郁闷啊,我在程序中搜索也只有两个地方找到啊,
如果我将调用的CALL LOOP35,0语句不用,但它会调用其它显示子程序,显示另一段代码,可是我这个程序中没调用它,查了四天,无结果,哎。。。。。
loop35:   ;这是我要调用的子程序,因是临时加入的子程序,所以此处先将主程序要调用的先完成再进行下面处理
CALL JMP2800,0
MOVLB 0

ZHU:   这是调用LOOP35的主程序
MOVWF 0xe4,BANKED
CALL loop35,0;CALL JMP2800,0   此处为插入位置
MOVLB 0

请大侠指点下到底 是哪方面的原因,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
24条回答
youmcu
1楼-- · 2020-02-09 12:02
用mplab ide的软件仿真(SIM)一下,看问题出在哪里-很方便啊

CALL loop35,0不应该用,0 吧

现在有个问题就是我有一个子程序,假如是LOOP35,我有两个地方调用它,但是程序实际运行时不止两个地方调用,所以造成其它地方有多余显示,???? 不止两个地方调用(调用了肯定要执行的)
kejian2000
2楼-- · 2020-02-09 16:07
 精彩回答 2  元偷偷看……
xyzasdad
3楼-- · 2020-02-09 16:59
CALL loop35,0为0是不压入其它STATUS等值,
我的这个子程序是在特定位置显示一行英文字,现在出现问题是,除了在规定位置显示了此文字,而且程序往下运行,在另一个页面的同一个位置也显示了此文字,

没有产生复位
headwolf_83
4楼-- · 2020-02-09 21:20
既然是汇编,你看看是不是程序哪里当年有人偷懒,不是CALL 一个标号,而是直接CALL一个地址之类的。总之看看有没有类似的事情。或者是CALL了前面一个子程序,那个子程序没有RETURN,于是LOOP35这里也被CALL了。
xyzasdad
5楼-- · 2020-02-10 02:33
谢谢大侠回复,我查过全部程序,所有CALL LOOPXX,0语法都正常,RETURN,0也正常,而且我将子程序搬到另外一个位置也是此情况,

而且需说明的是,程序写进去后,第一次是显示正常的,没有这个现象,但第二次运行时,却显示就不正常了,每一次第一次都正常,第二次就不正常了,为何,郁闷
mengxiang2000
6楼-- · 2020-02-10 06:37
PIC单片机我没用过,但以前用51时出现过类似情况,后来发现是堆栈设置小了。修改堆栈大小后就好了

一周热门 更多>