为何宏程序只能调用一次,第二次调用调试通不过
c2h equ 0x60c2l equ 0x61
bxs equ 0x62
chenh equ 0x63
chenl equ 0x64 dianyaxi equ0x71
dianliuxiequ0x72
cheng16macro 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 D:\PROGRA~1\MPLAB\н¨ÎÄ~1\XV01.ASM 89 : Address label duplicated or different in second pass (MUL16)
Error D:\PROGRA~1\MPLAB\н¨ÎÄ~1\XV01.ASM 93 : Address label duplicated or different in second pass (LOOP3)
Error D:\PROGRA~1\MPLAB\н¨ÎÄ~1\XV01.ASM 99 : Address label duplicated or different in second pass (ADD16C)
Error D:\PROGRA~1\MPLAB\н¨ÎÄ~1\XV01.ASM 107 : Address label duplicated or different in second pass (XY) 每个宏里都有那四个地址标号,一个程序不允许两处有相同的地址标号,因为程序不知道你要跳转到哪一个。
我发现你的四个标号下的程序已经没有宏调用的参数。为什么不将那部分程序合为一个子程序,每次调用一下就行了。
页:
[1]