PIC 编程帮助.创建一个计数器,但我的代码中有一些错误



我正在尝试在PIC16F628A板上创建一个简单的计数器,该计数器将有两个输入,一个用于增加值,一个用于减少,值将显示在 7 段显示器上,在我完成这部分后,我最终希望能够在第二个 7 段显示器上实现这一点并将其用作电子锁, 因此,任何进一步的建议将不胜感激。我已经编写了代码,但是当我尝试编译时,我收到以下错误代码:Counter.asm:32:错误[116] 地址标签在第二次传递中重复或不同:"CMCON"

    LIST    P=16f628A, R=Dec
__FUSES _XT_OSC & _WDT_OFF & _CP_OFF & _PWRTE_ON
include "P16f628A.inc"
CBLOCK  0x20
    W_TEMP
    STATUS_TEMP
    COUNTER
    FLAGS
    FILTR1
    FILTR2
ENDC


#DEFINE ST_BT1  FLAGS,0 
#DEFINE ST_BT2  FLAGS,1


MIN     EQU .0 ;minimum counter value
MAX     EQU .15 ;maximum counter value
T_FILTR EQU .255    



CMCON   
    movlw 0x07
    movwf CMCON


;reset
ORG 0x00
GOTO    start



ORG 0x04
CLRF    INTCON
RETURN



DISP7
    MOVF    COUNTER,W
   ANDLW    B'0001111'
   ADDWF    PCL,F
;
    RETLW   b'11101110' ;digit 0
    RETLW   b'00101000' ;digit 1
    RETLW   b'11001101' ;digit 2
    RETLW   b'01101101' ;digit 3
    RETLW   b'00101011' ;digit 4
    RETLW   b'01100111' ;digit 5
    RETLW   b'11100111' ;digit 6
    RETLW   b'00101100' ;digit 7
    RETLW   b'11101111' ;digit 8
    RETLW   b'00101111' ;digit 9
    RETLW   b'10101111' ;A
    RETLW   b'11100011' ;B
    RETLW   b'11000110' ;C
    RETLW   b'11101001' ;D
    RETLW   b'11000111' ;E
    RETLW   b'10000111' ;F


start       
    BCF     STATUS,RP0
MOVLW   B'00000111'
MOVWF   CMCON   
BSF     STATUS,RP0
MOVLW   B'00000110'
MOVWF   TRISA
MOVLW   B'00000000'
MOVWF   TRISB
MOVLW   B'10000000'
MOVWF   OPTION_REG

MOVLW   B'00000000'
MOVWF   INTCON
BCF     STATUS,RP0


CLRF    PORTA
CLRF    PORTB
CLRF    FLAGS
MOVLW   MIN
MOVWF   COUNTER
GOTO    DISPUP


MAIN
    MOVLW   T_FILTR
    MOVWF   FILTR1
    MOVWF   FILTR2
CHECK_BUTTON1
    BTFSC   PORTA,1 ;is button 1 pressed
    GOTO    BUTTON1_RELEASED
                ;yes
    DECFSZ  FILTR1,F
    GOTO    CHECK_BUTTON1
    BTFSS   ST_BT1
    GOTO    DEC
    GOTO    CHECK_BUTTON2
BUTTON1_RELEASED
    BCF     ST_BT1
CHECK_BUTTON2
    BTFSC   PORTA,2
    GOTO    BUTTON2_RELEASED
    DECFSZ  FILTR2,F
    GOTO    CHECK_BUTTON2
    BTFSS   ST_BT2
    GOTO    INC
    GOTO    MAIN
BUTTON2_RELEASED
    BCF ST_BT2
    GOTO    MAIN
DEC
    BSF ST_BT1
    MOVF    COUNTER,W
    XORLW   MIN

    BTFSC   STATUS,Z
    GOTO    MAIN
    DECF    COUNTER,F
    GOTO    DISPUP
INC
    BSF ST_BT2
    MOVF    COUNTER,W
    XORLW   MAX

    BTFSC   STATUS,Z
    GOTO    MAIN
    INCF    COUNTER,F
    GOTO    DISPUP
DISPUP
    CALL    DISP7
    MOVWF   PORTB

    GOTO    MAIN

    END

寄存器标签CMCON已在头文件 p16f628A.inc 中定义为 EQU H'001F' 。由于您在start的第一行中将该寄存器设置为 7,因此只需删除有问题的 3 行:

CMCON   
   movlw 0x07
   movwf CMCON

最新更新