TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: om@r en 13 de Agosto de 2009, 00:24:11
-
Hola a Todos!
Tengo un tema complicado para mi... el tema es el siguiente ,tengo un numero en Hex de 10 digitos!!!
y tengo que pasarlo a decimal... yo hice el pase con 2 digitos pero no con tantos :( busque en el foro
y no encontre nada! si alguien tiene alguna idea sobre esta rutina matematica sera bienvenida! .
Saludos!!!
-
Lo que necesitas es pasar un string de 10 dígitos en Hexa a una variable decimal?
-
Hola!!! :D si es un string de 10 digitos ,por ejemplo recivo 12A57839BF en Hex y tendria que pasarlo a Decimal :shock: usando la calculadora de windows seria 80085531071 en Dec. ,estoy usando un pic 16F873 :shock: la idea seria poder guardar temporalmente en variables este valor Decimal .Gracias por tu tiempo! .Saludos!!!
-
Nooo! y assembler me rindo! :mrgreen: O te equivocaste de subforo.
Si ya pasaste de 2 dígitos a decimal, ya lo tienes!! Empiezas por los 2 dígitos mas altos, lo transformas y tienes el byte MSB de los 5 que necesitas para formar tu variable de decimal. Y así con los restantes digitos, tomando de a 2.
String-> F 4 5 8 6 9 A 3 C A
| | | | | |
Bytes-> MSB ... .. . LSB
Saludos!
-
.
Hola. No se si te sirva, pero se me ocurre que podrías declarar unas cuantas variables para unidad, decena, centena, u. de mil.. etc, que al final conformarán el número decimal correspondiente al hexadecimal que recibe el pic, porque semejante número no va a caber en un byte y me parece la forma más cómoda de almecenarlos para usarlos luego. Entonces vas realizando la conversión bit por bit del string y aumentando primero la variable unidad, si esta llega a 9, aumentás la decena.. y así hasta terminar con todo el string.
Es sólo una idea, la verdad no quisiera estar en tus zapatos a la hora de codificar eso :mrgreen:
Saludos.
-
:-/ Gracias por contestar! a mi consulta! en verdad en assembler va estar un poco pesado :shock: hacer la rutina!
pero es el unico lenguaje que manejo.. por decir verdad... me defiendo como gato panza arriba :mrgreen:
jejej ,voy a tomar sus consejos y los voy a llevar a la practica ,suelo usar una rutina cuando tengo que trabajar los valores del convertidor analogico digital asi que voy a partir de esa... haber que sale!!
Bueno Muchas Gracias por sus respuestas!!!
Saludos a Todos !!!
-
Amigo... disculpa lo retardado.. pero quizas aun necesites la rutina... a continuacion el listado:
Define las variables argumento
MSB:X04 X03 X02 X01 X00:LSB donde va el numero hex de 10dig a convertir
XCNT =40 Numero de bits de X04-X00 8x5=40
MSB:Y05 Y04 Y03 Y02 Y01 Y00:LSB donde va el resultado BCD 4Bits (2 digitos BCD por Byte)
;********************************************************************
; W5BCD6: CONVERSION BINARY -> BCD
; BINARY (X04-X00) -> BCD (Y05-Y00)
; 3926 cyc (E8 D4 A5 0F FF -> 99 99 99 99 99 99)
W5BCD6 BSF RB1
CLRC
MOVLW 40
MOVWF XCNT
CALL CLRY
W_L40 RLF X00
RLF X01
RLF X02
RLF X03
RLF X04
RLF Y00
RLF Y01
RLF Y02
RLF Y03
RLF Y04
RLF Y05
DECFSZ XCNT
GOTO W_L41
BCF RB1
RETURN
W_L41 MOVLW Y00+1
MOVWF FSR
CALL W_L42
CALL W_L42
CALL W_L42
CALL W_L42
CALL W_L42
CALL W_L42
GOTO W_L40
W_L42 DECF FSR
MOVLW 3
ADDWF INDF
BTFSS INDF,3
SUBWF INDF
MOVLW 30H
ADDWF INDF
BTFSS INDF,7
SUBWF INDF
RETURN
;********************************************************
Funciona... la he comprobado muchisimas veces en diversas aplicaciones.
Saludos y espero que aun te sirva
-
Disculpa... La rutina de conversion te la envie incompleta. A continuacion la correcta:
;*****************************************************
; W5BCD6: RUTINA DE CONVERSION BINARY -> BCD
; BINARY (X04-X00) -> BCD (Y05-Y00)
; 3926 cyc (E8 D4 A5 0F FF -> 99 99 99 99 99 99)
W5BCD6 CLRC
MOVLW 40
MOVWF XCNT
CLRF Y05
CLRF Y04
CLRF Y03
CLRF Y02
CLRF Y01
CLRF Y00
W_L40 RLF X00
RLF X01
RLF X02
RLF X03
RLF X04
RLF Y00
RLF Y01
RLF Y02
RLF Y03
RLF Y04
RLF Y05
DECFSZ XCNT
GOTO W_L41
RETURN
W_L41 MOVLW Y00
CALL W_L42
MOVLW Y01
CALL W_L42
MOVLW Y02
CALL W_L42
MOVLW Y03
CALL W_L42
MOVLW Y04
CALL W_L42
MOVLW Y05
CALL W_L42
GOTO W_L40
W_L42 MOVWF FSR
MOVLW 3
ADDWF INDF
BTFSS INDF,3
SUBWF INDF
MOVLW 30H
ADDWF INDF
BTFSS INDF,7
SUBWF INDF
RETURN
;*****************************************************
-
Hola ATA :-/
Gracias!!! por la rutina ,ahora uso una que modifique a partir de unas que publica microchip
en la hoja AN526 tambien usa direccionamiento indirecto y rota los bytes pero viendo esta
creo que esta mejor resuelta ,cuando pueda la pruebo :shock: porque en este momento rato
libre que tengo me la paso luchando con el TMS3705 me tiene :shock: a mal traer :shock: este ci.
Saludos!!!! :-/