Problema con pic 16f628a mplab

hola! tengo un problema con este programa... estoy tratando de hacer que en el RP0, RP1, RP2 y RP3 me muestre un numero de 4 bits (unidades) y en RP4, RP5, RP6 y RP7 otro numero (decenas) queria simularlo usando 2 displays de 4 entradas (con conversor binario) usando como entrada todo el PORTA (en binario) y que me muestre ese valor... osea, estoy contando hasta tener el valor en la entrada y quiero mostrarlo en los displays.

el programa que hice es este:

LIST P=16F628A
#include <P16F628A.INC>
__CONFIG _LVP_OFF & _WDT_OFF & _INTOSC_OSC_NOCLKOUT
cblock 0x20
CONTA
DIEZ
MEMORIA1
MEMORIA2
endc
org 0x00
MOVLW .7
MOVWF CMCON
BSF STATUS,RP0 ; ingreso al BANCO1 para asignar entradas y salidas
CLRF TRISA
COMF TRISA,1 ; todo PORTA es entrada
CLRF TRISB ; todo PORTB es salida
BCF STATUS,RP0 ; regreso al BANCO0

CLRF MEMORIA1
CLRF MEMORIA2
CLRF DIEZ
MOVLW .10
MOVF DIEZ,1 ; DIEZ = 10 para que aumente un valor en la decena
MOVLW .0 ; asigno un valor inicial
MOVWF CONTA ; pongo variable CONTA al valor inicial

INICIO MOVF PORTA,0 ; guardo el valor de PORTA en w
ADDWF CONTA,1 ; guardo valor inicial + valor en CONTA
CALL CONTAR
ADDWF MEMORIA2,0 ; sumo MEMORIA2 + w y guardo en w
MOVWF PORTB ; muestro el valor de w en PORTB
CLRF MEMORIA2
GOTO INICIO

CONTAR MOVLW .0
DECF CONTA,1 ; resto 1 a variable CONTA y guardo en CONTA
BTFSC STATUS,2 ; si el bit z es 0 salto una linea
GOTO $+8 ; si z es 1 no aumento más y termino CONTAR
ADDLW .1 ; w = w + 1
MOVWF MEMORIA1 ; guardo el valor de w en variable MEMORIA
SUBWF DIEZ,0 ; resto DIEZ - w y guardo en w (se pierde valor de la cuenta)
BTFSC STATUS,2 ; si el bit z es 0 (resta diferente de 0), salta una posicion
GOTO DECENA
MOVWF MEMORIA1 ; regreso a w el valor guardado en MEMORIA
GOTO $-9
RETURN

DECENA MOVLW b'00010000'
ADDWF MEMORIA2,1 ; aumento valor de MEMORIA2 en 32(asigna un 10 en los display)
GOTO CONTAR

END
 
Atrás
Arriba