【问题标题】:Why does a simple delay routine produces error 116为什么简单的延迟例程会产生错误 116
【发布时间】:2023-04-05 03:45:01
【问题描述】:

我有一个非常简单的延迟例程来产生大于 0.5 秒的延迟;这个想法是使用 TMR2、PR2 和 PIC12F683;但它会产生错误 116

DELAY MACRO

    BANKSEL T2CON

    MOVLW 0x76  ; put register w=118

    MOVWF T2CON ; T2CON=W=1110111 Start TMR2 and set Postsacaler to 1110

    BANKSEL PR2

    MOVLW 0xC8

    MOVWF PR2 ; Put PR2 to 200

**Lazo

    BANKSEL T2CON

    BTFSS T2CON,TOUTPS0 ;when TMR2= PR2 bit 3 (post scaler) is incremented from 1110 to 1111 then jump next instruction and end macro

    GOTO Lazo****

    endm

Error[116]   C:\USERS\MUTANTE\MPLABXPROJECTS\CLAXON.X\MACROSDEF.INC 12 : Address label duplicated or different in second pass (Lazo)

知道为什么我在 Lazo 循环中遇到此错误

【问题讨论】:

  • endm 结束以单词 macro 加上名称打开的宏。显示您的实际代码(带缩进)。

标签: embedded delay pic microchip


【解决方案1】:

当一个宏被实例化时,它的内容被逐字插入,这就是汇编器所看到的。如果您在宏内部定义标签,然后多次调用该宏,则标签被定义多次,您将收到此错误。

宏中的标签必须在宏定义中使用 LOCAL 指令,因此:

DELAY MACRO
    LOCAL Lazo

    BANKSEL T2CON
    MOVLW 0x76  ; put register w=118
    MOVWF T2CON ; T2CON=W=1110111 Start TMR2 and set Postsacaler to 1110
    BANKSEL PR2
    MOVLW 0xC8
    MOVWF PR2 ; Put PR2 to 200

Lazo
    BANKSEL T2CON
    BTFSS T2CON,TOUTPS0 ; when TMR2= PR2 bit 3 (post scaler) is 
                        ; incremented from 1110 to 1111 then jump 
                        ; next instruction and end macro
    GOTO Lazo
    ENDM

【讨论】:

  • 太棒了!!!!!!!!!!!!我考虑为我的宏分配固定地址,分析堆栈是唯一的解决方案。谢谢
猜你喜欢
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多