Que tal ommarcano,
Primero que nada algunos consejos para la programamción.
1) Comentar el código. Es una excelente y recomendable práctica el comentar las líneas de tu código, ya que esto te permitirá entender mejor tu código y sobre todo, recordar su funcionamiento.
2) Usa los tabuladores para colocar tu código de una manera visualmente ordenada. Esto le dara mayor claridad y limpieza a tu código.
He agregado algunas correcciones a la parte de tu rutina llamada BAJADA ya que encontré algunos detalles en ella.
Algo que no mencionas es si estás simulando este código en PROTEUS o lo estás realizando en vivo sobre alguna tarjeta de demostración o en un BREADBOARD.
Si lo estás simulando en PROTEUS, con las corrreciones no deberías tener ningún problema, pero si estás armando el circuito en una tarjeta demo o en un BREADBOARD, entonces tienes que trabajar en los rebotes de los pulsadores de otra manera solo veras que los numeros brincan tan rápidamente que te dará la sensasión de que no funciona, ya que solo veras algunos numeros mostrados. Para ellos tienes que realizar algunas subrutinas de delay para implementar la eliminación de los rebotes.
Este es el código corregido sin la eliminación de rebotes:
LIST P=16F84A
INCLUDE "P16F84A.INC"
;**********************************************************
; Configuración de Fusibles
; Code Protect: OFF
; Watch-dog timer: OFF
; Power-up Timer: ON
; Oscillator: External Crystal
;**********************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
ORG 0x00
BSF STATUS,RP0 ;Cambia a banco 1
MOVLW 0x00 ;Configura todo el purrto B como salida
MOVWF PORTB
BSF PORTA,0 ;Configura puerto A0 como entrada
BSF PORTA,1 ;Configura puerto A1 como entrada
BCF STATUS,RP0 ;Cambia a Banco 0
MOVLW 0x3F ;Muestra un "0" en el display de 7 segmentos
MOVWF PORTB ;de cátodo común conectado al puerto B
DESARROLLO
BTFSC PORTA,0 ;Se presionó el interruptor de incremento?
GOTO SUBIDA ;Sí, entonces ve a rutina SUBIDA
BTFSC PORTA,1 ;No, se presionó interruptor de decremento?
GOTO BAJADA ;Sí, entonces ve a rutina BAJADA
GOTO DESARROLLO ;No, entonces regresa a preguntar por interruptor de incremento
DESARROLLO1
CLRW ;Limpia el registro de trabajo W
XORWF PORTA,W ;Verifica si los pulsadores se han liberado
BTFSS STATUS,Z ;Se han liberado los pulsadores?
GOTO DESARROLLO1 ;No, entonces espera hasta que se liberen
GOTO DESARROLLO ;Sí, entonces regresa a preguntar por los pulsadores.
SUBIDA
MOVLW 0X3F ;Coloca en el regsitro de trabajo W el valor del "0"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B está mostrando un "0"?
GOTO UNO ; Sí, entonces ve a rutina UNO
MOVLW 0x06 ; No, entonces coloca en el regsitro de trabajo W el valor del "1"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B esta mostrando un "1"?
GOTO DOS ; Sí, entonces ve a rutina DOS
MOVLW 0x5B ; No, entonces coloca en el registro de trabajo W el valor del "2"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B está mostrando un "2"?
GOTO TRES ; Sí, entonces ve a rutina TRES
MOVLW 0x4F ; No, entonces coloca en el registro de trabajo W el valor del "3"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B está mostrando un "3"?
GOTO CUATRO ; Sí, entonces ve a rutina CUATRO
MOVLW 0x66 ; No, entonces coloca en el registro de trabajo W el valor del "4"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B está mostrando un "4"?
GOTO CINCO ; Sí, entonces ve a rutina CINCO
MOVLW 0x6D ; No, entonces coloca en el registro de trabajo W el valor del "5"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B está mostrando un "5"?
GOTO SEIS ; Sí, entonces ve a rutina SEIS
MOVLW 0x7D ; No, entonces coloca en el registro de trabajo W el valor del "6"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B está mostrando un "6"?
GOTO SIETE ; Sí, entonces ve a rutina SIETE
MOVLW 0x07 ; No, entonces coloca en el registro de trabajo W el valor del "7"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B está mostrando un "7"?
GOTO OCHO ; Sí, entonces ve a rutina OCHO
MOVLW 0x7F ; No, entonces coloca en el registro de trabajo W el valor del "8"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B está mostrando un "8"?
GOTO NUEVE ; Sí, entonces ve a rutina NUEVE
MOVLW 0x67 ; No, entonces coloca en el registro de trabajo W el valor del "9"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B está mostrando un "9"?
GOTO CERO ; Sí, entonces ve a rutina CERO
GOTO DESARROLLO ; No, entonces ve a rutina DESARROLLO para preguntar por los pulsadores
BAJADA
CLRF W ; Limpia el registro de trabajo W
MOVLW 0X3F ;Coloca en el regsitro de trabajo W el valor del "0"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B está mostrando un "0"?
GOTO NUEVE ; Sí, entonces ve a rutina NUEVE
MOVLW 0x06 ; No, entonces coloca en el regsitro de trabajo W el valor del "1"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B esta mostrando un "1"?
GOTO CERO ; Sí, entonces ve a rutina CERO
MOVLW 0x5B ; No, entonces coloca en el registro de trabajo W el valor del "2"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B está mostrando un "2"?
GOTO UNO ; Sí, entonces ve a rutina UNO
MOVLW 0x4F ; No, entonces coloca en el registro de trabajo W el valor del "3"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B está mostrando un "3"?
GOTO DOS ; Sí, entonces ve a rutina DOS
MOVLW 0x66 ; No, entonces coloca en el registro de trabajo W el valor del "4"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B está mostrando un "4"?
GOTO TRES ; Sí, entonces ve a rutina TRES
MOVLW 0x6D ; No, entonces coloca en el registro de trabajo W el valor del "5"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B está mostrando un "5"?
GOTO CUATRO ; Sí, entonces ve a rutina CUATRO
MOVLW 0x7D ; No, entonces coloca en el registro de trabajo W el valor del "6"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B está mostrando un "6"?
GOTO CINCO ; Sí, entonces ve a rutina CINCO
MOVLW 0x07 ; No, entonces coloca en el registro de trabajo W el valor del "7"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B está mostrando un "7"?
GOTO SEIS ; Sí, entonces ve a rutina SEIS
MOVLW 0x7F ; No, entonces coloca en el registro de trabajo W el valor del "8"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B está mostrando un "8"?
GOTO SIETE ; Sí, entonces ve a rutina SIETE
MOVLW 0x67 ; No, entonces coloca en el registro de trabajo W el valor del "9"
SUBWF PORTB,0 ; W = PORTB - W
BTFSC STATUS,Z ; El puerto B está mostrando un "9"?
GOTO OCHO ; Sí, entonces ve a rutina OCHO
GOTO DESARROLLO ; No, entonces ve a rutina DESARROLLO para preguntar por los pulsadores
CERO
MOVLW 0x3F ; Coloca en el registro de trabajo el valor del "0"
MOVWF PORTB ; Muestra en el display de 7 segmentos el "0"
GOTO DESARROLLO1 ; Regresa a preguntar por los pulsadores
UNO
MOVLW 0x06 ; Coloca en el registro de trabajo el valor del "1"
MOVWF PORTB ; Muestra en el display de 7 segmentos el "1"
GOTO DESARROLLO1 ; Regresa a preguntar por los pulsadores
DOS
MOVLW 0x5B ; Coloca en el registro de trabajo el valor del "2"
MOVWF PORTB ; Muestra en el display de 7 segmentos el "2"
GOTO DESARROLLO1 ; Regresa a preguntar por los pulsadores
TRES
MOVLW 0x4F ; Coloca en el registro de trabajo el valor del "3"
MOVWF PORTB ; Muestra en el display de 7 segmentos el "3"
GOTO DESARROLLO1 ; Regresa a preguntar por los pulsadores
CUATRO
MOVLW 0x66 ; Coloca en el registro de trabajo el valor del "4"
MOVWF PORTB ; Muestra en el display de 7 segmentos el "4"
GOTO DESARROLLO1 ; Regresa a preguntar por los pulsadores
CINCO
MOVLW 0x6D ; Coloca en el registro de trabajo el valor del "5"
MOVWF PORTB ; Muestra en el display de 7 segmentos el "5"
GOTO DESARROLLO1 ; Regresa a preguntar por los pulsadores
SEIS
MOVLW 0x7D ; Coloca en el registro de trabajo el valor del "6"
MOVWF PORTB ; Muestra en el display de 7 segmentos el "6"
GOTO DESARROLLO1 ; Regresa a preguntar por los pulsadores
SIETE
MOVLW 0x07 ; Coloca en el registro de trabajo el valor del "7"
MOVWF PORTB ; Muestra en el display de 7 segmentos el "7"
GOTO DESARROLLO1 ; Regresa a preguntar por los pulsadores
OCHO
MOVLW 0x7F ; Coloca en el registro de trabajo el valor del "8"
MOVWF PORTB ; Muestra en el display de 7 segmentos el "8"
GOTO DESARROLLO1 ; Regresa a preguntar por los pulsadores
NUEVE
MOVLW 0x67 ; Coloca en el registro de trabajo el valor del "9"
MOVWF PORTB ; Muestra en el display de 7 segmentos el "9"
GOTO DESARROLLO1 ; Regresa a preguntar por los pulsadores
END
Espero esto te ayude.
elreypic.
P.S Realicé una pequeña modificación para la operación correcta.