Muchas gracias! Antes de nada, ruego paciencia, esto lo estudie hace 3 años, pero lo tengo completamente olvidado.
He empezado por algo sencillo con la intención de ir avanzando. He hecho un programa que se trata de un contador ascendente/descendente de un solo digito, la cosa es que solo asciende...
LIST P=16F84
#include P16F84A.inc
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
CON1 EQU 0C
CON2 EQU 0D
CON3 EQU 0E
CONTA EQU 0F
ORG 0
GOTO INICIO
ORG 5
INICIO
BSF STATUS,5
CLRF TRISB
MOVLW B'00011111'
MOVWF TRISA
BCF STATUS,5
COMI
CLRF CONTA
VOLVER
MOVF CONTA,0
CALL TABLA
MOVWF PORTB
SUBIR1
BTFSS PORTA,0
GOTO SUBIR1
CALL RETAR
SUBIR2
BTFSC PORTA,0
GOTO SUBIR2
CALL RETAR
INCF CONTA,1
MOVF CONTA,0
XORLW 0X0A
BTFSC STATUS,2
GOTO COMI
GOTO VOLVER
BAJAR1
BTFSS PORTA,1
GOTO BAJAR1
CALL RETAR
BAJAR2
BTFSC PORTA,1
GOTO BAJAR2
CALL RETAR
DECF CONTA,1
MOVF CONTA,0
XORLW 0X0A
BTFSC STATUS,2
GOTO VOLVER
RETAR
MOVLW 0X10
MOVWF CON1
SAL3
MOVWF CON2
SAL2
MOVWF CON3
SAL1
DECFSZ CON3,1
GOTO SAL1
DECFSZ CON2,1
GOTO SAL2
DECFSZ CON1,1
GOTO SAL3
RETURN
TABLA
ADDWF PCL,F
RETLW 0X3F
RETLW 0X06
RETLW 0X5B
RETLW 0X4F
RETLW 0X66
RETLW 0X6D
RETLW 0X7D
RETLW 0X07
RETLW 0X7F
RETLW 0X6F
END