;*****************************************b-bcd****************************************************
;
;convertir un numero binario a bcd
;
;ZONA DE DATOS*************************************************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST p=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
Unidades
Centenas
Decenas
ENDC
NUMERO EQU .124
;ZONA DE CODIGOS***********************************************************************************
ORG 0
Inicio
bsf STATUS,RP0
clrf TRISA
clrf TRISB
bcf STATUS,RP0
Principal
clrf Centenas ;Iniciamos en 0 la variable centenas
clrf Decenas ;Iniciamos en 0 la variable decenas
movlw NUMERO
movwf Unidades ;asignamos valor a unidades
Resta_10
movlw .10
subwf Unidades,W
btfss STATUS,C ;comprobamos si es mayor que 10
goto BCD_Fin ;si no es mayor se va a la ultima etapa
movwf Unidades ;Unidades es ahora Unidades - 10
Decena_resta
movlw .9
subwf Decenas,W
btfss STATUS,Z ;Decenas == 9?
goto Decena_resta2 ;si no es igual a 9 se va a la etapa 2
clrf Decenas ;vuelve a 0 Decenas
incf Centenas,F ;incrementa Centenas
goto Resta_10 ;vuelve al ciclo
Decena_resta2
incf Decenas,F ;incrementa decenas
goto Resta_10 ;vuelve al ciclo
BCD_Fin
swapf Decenas,W ;carga registro w con Decenas
addwf Unidades,W
movwf PORTB ;mostramos resultado en el puerto B
movlw Centenas ;carga registro con Centenas
movwf PORTA ;mostramos resultado en el puerto A
END