facil de usar solo se declaran los registro. Donde esta el dato
a convertir lo ubicamos de antemano en el registro L_BYTE y los
valores de salida entan ubicados en UNIDAD_ASCII, DECENA_ASCII Y
CENTENA_ASCII. Esta es una version modificada desarrollado por
MICROCHIP
B2_BCD BCF STATUS,0 ;BORRA EL CARRY
MOVLW .8 ;CONTADOR HASTA 8
MOVWF CONTADOR1
CLRF R0 ;UNIDADES
CLRF R1 ;DECENAS
CLRF R2 ;CENTENAS
LOOP16 RLF L_BYTE,F
RLF R2,F
RLF R1,F
RLF R0,F
DECFSZ CONTADOR1,F
GOTO ADJDEC
MOVF R1,0
MOVWF R0
MOVLW 0F0H
ANDWF R2,0
MOVWF INVER
SWAPF INVER,0
MOVWF R1
MOVLW 0FH
ANDWF R2,1
CONVER_ASCII: MOVF R2,0
ADDLW 30H ;SUMO 30H PARA CONVERTIR A ASCII
MOVWF UNIDAD_ASCII
MOVF R1,0
ADDLW 30H ;SUMO 30H PARA CONVERTIR A ASCII
MOVWF DECENA_ASCII
MOVF R0,0
ADDLW 30H ;SUMO 30H PARA CONVERTIR A ASCII
MOVWF CENTENA_ASCII
CLRF R2
CLRF R1
CLRF R0
RETURN
ADJDEC MOVLW R2
MOVWF FSR
CALL ADJBCD
MOVLW R1
MOVWF FSR
CALL ADJBCD
MOVLW R0
MOVWF FSR
CALL ADJBCD
GOTO LOOP16
ADJBCD MOVLW 3
ADDWF INDF,0
MOVWF TEMP
BTFSC TEMP,3 ; TEST IF RESULT > 7
MOVWF INDF
MOVLW 30
ADDWF INDF,0
MOVWF TEMP
BTFSC TEMP,7 ; TEST IF RESULT > 7
MOVWF INDF ; SAVE AS MSD
RETURN