Autor Tema: Conversor long int a BCD  (Leído 1774 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado fenix_jn

  • PIC18
  • ****
  • Mensajes: 418
Conversor long int a BCD
« en: 20 de Febrero de 2005, 22:57:00 »
Hola, estoy implementando un velocimetro digital para el auto, pero no lo hago con el proposito principal de ser el "velocimetro" sino con el proposito de ver el mismo programa escrito es tres lenguajes "universales" distintos, ya he logrado pasarlo de ASM (originalmente en ese lenguaje) a PBP, y ahora estoy con la ultima fase que es pasarlo a C, todas las rutinas son pasables excepto por una, tengo un long int que estoy tratando de sacar por displays 7 segmentos, pero necesito pasar ese numerito tipo long int a BCD para poder mostrarlo. Existe alguna funcion o procedimiento que haga esa funcion??

Nota: Si ya se q siempre dicen "busca antes de preguntar" pero son muchas paginas y para colmo el buscador del foro me arroja la cantidad de resultados pero me dice un error en el sintaxis de SQL (????????). (no me los muestra Avergonzado)

Desconectado tornar

  • PIC18
  • ****
  • Mensajes: 342
RE: Conversor long int a BCD
« Respuesta #1 en: 21 de Febrero de 2005, 04:21:00 »
Fenix, si el numero q kieres pasar esta en decimal, es muy facil pasarlo a BCD, no se si existira alguna funcion que lo haga, pero si no hazlo tu, pq en 5 o 6 lineas tienes hecha la funcion.

Por ejemplo, si tienes el numero 153 en decimal, para pasarlo a BCD yo haria lo siguiente:

153 / 100 = 1   <--- PRIMER CODIGO A PASAR A BCD (0001)

153 mod 100= 53

53 / 10 = 5  <--- SEGUNDO CODIGO A PASAR A BCD (0101)

53 mod 10 = 3 <-- TERCER CODIGO A PASAR A BCD (0011)

Para pasar los numeros digitales obtenidos que iran del 0..9, simplemente realizamos una conversion a binario, y añadimos por la izquierda tantos ceros como necesitemos para completar los 4 bits correspondientes a los codigos BCD. Yo para hacer esto crearia un registro parecido al siguiente:

RECORD BCD:

codigo1: ARRAY [0..3] OF INTEGER;
codigo2: ARRAY [0..3] OF INTEGER;
codigo3: ARRAY [0..3] OF INTEGER;

Y iniciaria todos los arrays a 0, luego empezaria pasando los digitos hallados anteriormente a binario, empezando a completar por la ultima posicion del ARRAY.

Para pasar los numeros a binario, puedes usar el tipico algoritmo de la division.

Ahora el numero en BCD para el 153, seria la impresion del registro en orden.


Un saludo.

Desconectado fenix_jn

  • PIC18
  • ****
  • Mensajes: 418
RE: Conversor long int a BCD
« Respuesta #2 en: 21 de Febrero de 2005, 21:58:00 »
Ok bueno, gracias, el numerito que tengo q pasar es de 5 digitos... creo q la aplicacion es mas o menos la misma.

Desconectado tornar

  • PIC18
  • ****
  • Mensajes: 342
RE: Conversor long int a BCD
« Respuesta #3 en: 22 de Febrero de 2005, 03:01:00 »
Si, seria todo igual, pero empezando a dividir por 10.000, y en el RECORD metes codigo4, y codigo5. Te puse numeros de 3 cifras, porque como estabas haciendo un velocimetro, crei que funcionaria en Km/h...

Desconectado fenix_jn

  • PIC18
  • ****
  • Mensajes: 418
RE: Conversor long int a BCD
« Respuesta #4 en: 22 de Febrero de 2005, 18:23:00 »
Bueno de hecho funciona en dos escalas distintas seleccionables (mph y km/h), la cuestion es q originalmente diseñe el programa para funcionar con dos digitos decimales, el formato seria XXX.XX, y la idea es preservar la estructura del programa para q se vean las diferencias entre cada rutina de cada lenguaje y demostrar que las 3 hacen exactamente lo mismo.


 

anything