Reputation: 1
I am attempting to create a simple counter on a PIC16F628A board that will have two inputs, one to increase value, one to decrease and the values will be displayed on a 7 segment display, after I have completed this part I would eventually like to be able to implement this on a second 7-segment display and use it as an electronic lock, so any further advice would be appreciated. I have written my code but when I attempt to compile I get these error codes: Counter.asm:32:Error[116] Address label duplicated or different in second pass: "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
Upvotes: 0
Views: 467
Reputation: 700
The register label CMCON
is already defined in the header file p16f628A.inc as EQU H'001F'
. Since you set that register to 7 in the first lines of start
just remove the offending 3 lines:
CMCON
movlw 0x07
movwf CMCON
Upvotes: 1