TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: manuelroin en 08 de Diciembre de 2005, 09:27:00
-
Necesito su ayuda quiero convertir un byte a BCD y no se me ocurre nada podrian darme una mano
-
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
-
QUISIERA QUE ME HAGAS EL PROGRAMA PERO SIN SUBRUTINA PQ YO TENGO UNA PARA CONVERTIR HEX A BCD PERO LO QUE QUIERO ES ENTENDER LA SUBRUTINA PLEASE PERDON TAL VEZ NO ME EXPLIQUE BIEN
-
COMO LO VEN !!!!
algo mas JEFE... ? 
chiales
Bueno pues no te entiendo que es lo que quieras... pero mira bajate este powerpoint y de seguro le entiendes a la subrutina... lo que la subrutina hace es restar 10 del valor que quieres convertir... y asi se la pasa restando siempre 10...
bINARIO bcd
EL "0D H" del powerponit corresponde al numero de restas que se realizo en el primer paso.
En el powerpoint esta bien explicado..
Saludos !
-
Escrito originalmente por manuelroin
Necesito su ayuda quiero convertir un byte a BCD y no se me ocurre nada podrian darme una mano
En www.piclist.com busca bcd y encontraras varios ejemplos sobre el tema, con el código comentado 
Saludos
-
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 !!! :)
-
Hola !!! quiero entender como funciona este codigo, le hice un seguimiento paso a paso pero no me funciona :(
Veamos si te puedo dar una mano
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)?
No, W siempre tendrá el resultado de la resta, ya sea mayor , menor o igual.
La instrucción SUBWF f,w guarda el resultado en WREG cualquiera sea su valor. El carry estará encendido mientras MSD sea >= WREG.
Lo que ocurre es que si el carry está encendido, el MSD es sobreescrito con el valor de WREG, osea con el resultado de la resta y la rutina continúa.
-
maunix, te pasaste!!!! ahora me salio el seguimiento paso a paso, me resulta para cualquier numero de 0 a 255 como yo lo necesito... bien, seguire con mi proyecto, graicas porque sé que ante cuaqluier duda puedo contar con ustedes.
Nuevamente gracias...
Francisco