英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 3363|回复: 1
打印 上一主题 下一主题

为何宏程序只能调用一次,第二次调用调试通不过

[复制链接]
跳转到指定楼层
1#
发表于 2009-3-31 13:57:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
c2h    equ   0x60   
    c2l     equ   0x61   
    bxs     equ   0x62   
   chenh   equ   0x63   
    chenl   equ   0x64    dianyaxi   equ  0x71
    dianliuxi  equ  0x72
cheng16  macro a,b
    movf      a,0
    movwf     c2l
    movlw     0x00
    movwf     c2h
    movf      b,0
    movwf     bxs
mul16
    clrf     chenl
    clrf     chenh
    incf     bxs,1
loop3
    decf     bxs,1
    btfsc    status,z
    goto     xy
    call     add16c
    goto     loop3
add16c
    movf      c2l,w
    addwf     chenl
    btfsc     status,c
    incf      chenh
    movf      c2h,w
    addwf     chenh,1
    retlw     0
  xy
    nop
endm
只调用该程序一次,运行正常,当再调用时出现错误。
详细情况如下:
第一次调用
   movlw   0xf7           
   movwf   dianyaxi
   cheng16 0x22,dianyaxi  
;调试运行正常。

第二次调用
movlw   0x38
movwf   dianliuxi
  cheng16 0x23,dianliuxi  
结果出现以下错误!
Error[116]   D:\PROGRA~1\MPLAB\н¨ÎÄ~1\XV01.ASM 89 : Address label duplicated or different in second pass (MUL16)
Error[116]   D:\PROGRA~1\MPLAB\н¨ÎÄ~1\XV01.ASM 93 : Address label duplicated or different in second pass (LOOP3)
Error[116]   D:\PROGRA~1\MPLAB\н¨ÎÄ~1\XV01.ASM 99 : Address label duplicated or different in second pass (ADD16C)
Error[116]   D:\PROGRA~1\MPLAB\н¨ÎÄ~1\XV01.ASM 107 : Address label duplicated or different in second pass (XY)
2#
 楼主| 发表于 2009-3-31 13:57:29 | 只看该作者
每个宏里都有那四个地址标号,一个程序不允许两处有相同的地址标号,因为程序不知道你要跳转到哪一个。

我发现你的四个标号下的程序已经没有宏调用的参数。为什么不将那部分程序合为一个子程序,每次调用一下就行了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-5-13 11:39 , Processed in 0.054367 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表