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.
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 returnAl 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
oye y como lo hago para simuproc?
ResponderEliminarUtiliza nuestro foro de electronica si tienes dudas no relacionadas con este tema.