Buenas lo cambie algunas partes del codigo para eliminar errores pero creo que le provoque
y me copilo pero lo pongo en proteus y no hace nada
list p=16f84a
include P16F84a.INC
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
PORTVIEJO EQU 0x0C
NUMERO EQU 0x0D
CUENTA EQU 0x0E
ORG 0X00
GOTO configuracion
ORG 0x04
GOTO configuracion
configuracion
BSF STATUS,RP0
MOVLW b'00000000'
MOVWF TRISB
MOVLW b'1111111'
MOVWF TRISA
CLRF OPTION_REG
BCF STATUS,RP0
CLRF PORTA ; inicialización del puerto A
CLRF PORTB ; inicialización del puerto B
CLRF PORTVIEJO ; inicializo mis variables a 0
CLRF NUMERO
CLRF CUENTA
principal ;Rutina principal
BTFSC PORTA,0 ;Primer boton, Enter
CALL enter
BTFSC PORTA,1 ; Segundo boton Reset
CALL reset
BTFSC PORTA,2 ; Tercer boton contador
CALL contar
MOVF PORTA,W
MOVWF PORTVIEJO ;Actualizo el valor de mi variable por si se pone a 0
GOTO principal
contar
MOVF PORTVIEJO,W
XORWF PORTA,W
BTFSC STATUS,Z ;Si entro por 2da o mas veces por que se mantuvo presionado entonces que no cuente otra ves
RETURN
MOVF PORTA,W
MOVWF PORTVIEJO ;Actualizo el valor de mi variable
INCF CUENTA,W ;Sumo a la cuenta
RETURN
reset
CLRF PORTB ; Limpio todas las variables usadas y el puerto lo pongo a 0
CLRF NUMERO
CLRF CUENTA
RETURN
enter
MOVF PORTVIEJO,W
XORWF PORTA,W
BTFSC STATUS,Z
RETURN
CALL tabla
SUBWF CUENTA,W ; Reviso que la cantidad presionada sea la correcta, resto y si da cero entonces es correcto
BTFSS STATUS,Z
GOTO error1
BSF PORTB,NUMERO ; Pongo a 1 la salida RB0,1,2 segun lo que valga NUMERO.
INCF NUMERO,W ; Paso al siguiente numero, es decir 6 segun la tabla.
MOVLW 0x04
SUBWF NUMERO,W ; Le resto 4 a Numero y lo guardo en W para saber si numero llego a 4, es decir ya pasaron 0,1,2 y 3
BTFSS STATUS,Z
RETURN ; Si no llego a 4 entonces que vuelva al principal
BSF PORTB,NUMERO ; Por ultimo pongo en alto la ultima salida. RB4
CLRF NUMERO ; Si llega al 4to valor que desee los valores de numero y cuenta, el portb quedaria encendido
CLRF CUENTA ; y con el reset se borra o presionando enter y con un numero mal tambien.
RETURN
error1 ; Si al presionar enter la cantidad no es correcta, limpio todo y vuelvo a 0 ?
CLRF PORTB
CLRF NUMERO
CLRF CUENTA
RETURN
; En la tabla se encuentran todos tus valores a comparar, podes agregar mas y cambiar el limite de NUMERO en la ruina de "enter"
tabla
MOVF NUMERO,W
ADDWF PCL ; PCL <- PCL + numero
RETLW 0X04 ; primer valor a contar
RETLW 0X06 ; segundo valor
RETLW 0X02 ; tercer valor
RETLW 0X03
END