TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Rodricity en 28 de Diciembre de 2007, 17:01:27

Título: Un problema... extraño, calculos
Publicado por: Rodricity 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...
Título: Re: Un problema... extraño, calculos
Publicado por: Rodricity 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.
Título: Re: Un problema... extraño, calculos
Publicado por: BrunoF en 28 de Diciembre de 2007, 19:14:59
Asegurate que las variables "entero" y "valor" sean de 32bits sin punto flotante(¿int32?).
Título: Re: Un problema... extraño, calculos
Publicado por: Nocturno 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"
Título: Re: Un problema... extraño, calculos
Publicado por: Rodricity 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