2015-01-12 1 views
0

Я пытаюсь создать простой счетчик на плате 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 
+0

Могли бы вы прокомментировать свой код? Это нам очень помогло. –

+0

Я не уверен, что вы имеете в виду, код, который я включил в мой вопрос, это мой код? Спасибо, что посмотрели на это для меня! – whatareyoulookingat

ответ

1

Ярлыка регистра CMCON уже определен в файле заголовка p16f628A.inc как EQU H'001F'. Так как вы установили, что регистр до 7 в первых строках start просто удалите строки, нарушившая 3:

CMCON 
    movlw 0x07 
    movwf CMCON 
Смежные вопросы