Numero Binario de 8 bits a BCD mediante el algoritmo Recorre y Suma+3

En la entrada anterior se encuentra una rutina para convertir un numero Binario de 8 bits a BCD empleando un metodo de division po restas sucesivas. En esta ocasion presento una rutina para lograr la misma conversion de Binario a BCD empleando el algoritmo Recorre y Suma+3.

El algoritmo funciona de la siguiente manera:
  • Recorre 1 bit a la izquierda el numero binario.
  • Si se han hecho 8 corrimientos, el numero BCD se encuentra en las columnas CENTENAS, DECENAS y UNIDADES.
  • Si el valor binario de cualquiera de las columnas BCD es 5 o mayor, se suma 3 al valor en esta columna BCD.
  • Si se desea convertir un byte despues de haber efectuado 8 corrimientos la conversion ha finalizado, para 2 bytes se necesitarian 16 y asi sucesivamente.
Es un metodo muy facil de entender y aplicar. Utilizando este algoritmo la rutina que permite convertir un numero binario de 8 bits a BCD es la siguiente:

BIN2BCD_RS3
        clrf     BCDH
        clrf     BCDL

        movlw    0x08
        movwf    CUENTA

CONVERSION1
        bcf      STATUS,C
        rlf      BIN,f
        rlf      BCDL,f
        decfsz   CUENTA,f
        goto     $+2
        goto     TERMINA_CONVERSION
        movlw    b'00001111'
        andwf    BCDL,w
        movwf    BCD_TEMP
        movlw    0x05
        subwf    BCD_TEMP,w
        btfsc    STATUS,C
        call     SUMA0x03
        movlw    b'11110000'
        andwf    BCDL,w
        movwf    BCD_TEMP
        movlw    0x50
        subwf    BCD_TEMP,w
        btfsc    STATUS,C
        call     SUMA0x30
        goto     CONVERSION1

TERMINA_CONVERSION
        return 
Al igual que la rutina anterior, antes de llamar a esta rutina de conversion es necesario tener almacenado el numero que se desea convertir en la variable BIN. Al finalizar la rutina el numero BCD estara almacenado en las variables BCDH y BCDL. El nibble bajo de BCDH tendra almacenadas las CENTENAS, el nibble alto de BCDL las DECENAS y el nibble bajo de BCDL las UNIDADES.

De nuevo hay que tener en cuenta que al realizar la conversion el numero que se tenia en un principio en la variable BIN es destruido, asi que se debe tener un respaldo de su valor en otro registro si se desea seguir trabajando con el.

Las rutinas SUMA0x03 Y SUMA0x30 simplemente se encargan de sumar 3 a la columna BCD que lo necesite. Estas rutinas se encuentran en el codigo de la rutina.

Descargar codigo: Conversion numero Binario de 8 bits a BCD - Recorre y Suma+3