Muy facil... utiliza esta subrutina...
SOLO RECUERDA QUE ANTES DE MANDAR LLAMAR ESTA SUBRUTINA DEBES DE PONER EL NUMERO BCD (BYTE) QUE QUIERES CONVERTIR EN EL REGISTRO W.
DESPUES DEL REGRESO DE LA SUBRUTINA LOS VALORES BCD QUEDAN ALMACENADOS EN CENT(CENTENAS) MSD (DECENAS) Y LSD (UNIDADES)... RECUERDA QUE POR SER SOLO 8 BITES LOS DE UN BYTE... SOLO PODRAS OBTENER HASTA EL MAXIMO DE 255 BCD (O 256 NO RECUERDO BIEN)
;SUBRUTINA DE BINARIO A BCD
BINBCD
CLRF CENT ;CENTENAS
clrf MSD ;DECENAS
movwf LSD ;UNIDADES
gtenth movlw .10
subwf LSD,W
BTFSS STATUS,C
goto OVERHAUL
movwf LSD
incf MSD, F
goto gtenth
OVERHAUL
MOVLW .10
SUBWF MSD,W
BTFSS STATUS,C
GOTO OVER
MOVWF MSD
INCF CENT,F
GOTO OVERHAUL
OVER
RETLW 0
<img src="http://pics.miarroba.com/caretos/flash.gif" alt="Flash" title="Flash" />
Hola !!! quiero entender como funciona este codigo, le hice un seguimiento paso a paso pero no me funciona
Sacame de unas dudas...
En la porcion de codigo:
subwf MSD,W ; resta MSD-W y lo guarda en W.
BTFSS STATUS,C ; verifica si el bit C del registro STATUS es 1, si es asi entonces salta.
GOTO OVER
MOVWF MSD
Si la resta MSD-W no da positiva (MSD menor que W), entonces el bit C del registro STATUS seria 1? y entonces saltaria la siguiente instruccion? (se salta el GOTO para hacer el MOVWF)
Si ese fuese el caso, entonces W quedaria con el valor que tenia ANTES de que se ejecutara esta resta (puesto que el resultado no esta definido en binario)?
Lo otro lo entiendo bien, si me despejas estas dudas entonces podria ver como funciona este codigo...
Gracias !!!