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

标题: 为何宏程序只能调用一次,第二次调用调试通不过 [打印本页]

作者: winnie    时间: 2009-3-31 13:57
标题: 为何宏程序只能调用一次,第二次调用调试通不过
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)
作者: winnie    时间: 2009-3-31 13:57
每个宏里都有那四个地址标号,一个程序不允许两处有相同的地址标号,因为程序不知道你要跳转到哪一个。

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




欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/) Powered by Discuz! X3.2