Autor Tema: Un problema... extraño, calculos  (Leído 2362 veces)

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

Desconectado Rodricity

  • PIC10
  • *
  • Mensajes: 43
Un problema... extraño, calculos
« en: 28 de Diciembre de 2007, 17:01:27 »
 Pues eso, tengo un problema:

 Haciendo una funcion para traspasar numeros, a "BCD" o mas bien a cadenas de numeros de la tabla ASCII, me doy cuenta, que por mas que intento, no puedo pasar un numero mayor que 39.999, aca les dejo el codigo, y cada vez que lo simulo en proteus al intentar convertir un numero igual o mayor que 40.000 me salen caracteres extraños...

Código: [Seleccionar]
//************************************************************
entero = valor / 100000;
if(entero == 0 & nulos == 1)
{
escribir_lcd(entero+48);
}
if(entero!=0)
{
escribir_lcd(entero+48);
nulos = 1;
}
valor = valor - (entero*100000);

//************************************************************
entero = valor / 10000;
if(entero == 0 & nulos == 1)
{
escribir_lcd(entero+48);
}
if(entero!=0)
{
escribir_lcd(entero+48);
nulos = 1;
}
valor = valor - (entero*10000);
//************************************************************
entero = valor / 1000;
if(entero == 0 & nulos == 1)
{
escribir_lcd(entero+48);
}
if(entero!=0)
{
escribir_lcd(entero+48);
nulos = 1;
}
valor = valor - (entero*1000);
//************************************************************
entero = valor / 100;
if(entero == 0 & nulos == 1)
{
escribir_lcd(entero+48);
}
if(entero!=0)
{
escribir_lcd(entero+48);
nulos = 1;
}
valor = valor - (entero*100);
//************************************************************
entero = valor / 10;
if(entero == 0 & nulos == 1)
{
escribir_lcd(entero+48);
}
if(entero!=0)
{
escribir_lcd(entero+48);
nulos = 1;
}
valor = valor - (entero*10);
escribir_lcd(valor+48);
}

 Pues eso, no se me ocurre cual podria ser el error, se me ahce que con el numero 40.0000 hace una operacion matematica que excede la "cantidad" de "numeros" que puede manejar el pic...

Desconectado Rodricity

  • PIC10
  • *
  • Mensajes: 43
Re: Un problema... extraño, calculos
« Respuesta #1 en: 28 de Diciembre de 2007, 17:03:27 »
 Se me olvido agregar, el "nulos" es simplemente para definir si quiero que los caracteres nulos aparescan o no, es decir

 Colocando nulos = 1

 la transformacion del numero 625 seria "00625".

 Por otro lado con nulos = 0 seria simplemente 625.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Un problema... extraño, calculos
« Respuesta #2 en: 28 de Diciembre de 2007, 19:14:59 »
Asegurate que las variables "entero" y "valor" sean de 32bits sin punto flotante(¿int32?).
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Un problema... extraño, calculos
« Respuesta #3 en: 29 de Diciembre de 2007, 03:50:45 »
Es probable que estés usando enteros de 16 bits con signo, cuyo límite superior es 32.768.
Como te recomienda Bruno, prueba con "unsigned int32"

Desconectado Rodricity

  • PIC10
  • *
  • Mensajes: 43
Re: Un problema... extraño, calculos
« Respuesta #4 en: 04 de Enero de 2008, 12:40:11 »
 Correcto, el problema era claramente ese, y de hecho, tenia sentido:

 Ya que al ser con signo el valor maximo que podia alcanzar era 32.000

 al ser 39999 tomaba el valor 30.000, y en 40.000 tomaba un valor que excedia el maximo para un entero con signo.

 Esop, muchas gracias, ya lo corregi y ahora puedo convertir hasta el numero 4999999999  :D


 

anything