TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Algec en 17 de Agosto de 2011, 10:00:24

Título: Visualizar entero con signo de mas de 32 Bits
Publicado por: Algec en 17 de Agosto de 2011, 10:00:24
Como podria visualizar en LCD un entero con signo de mas de 32 Bits?, el pic solo admite 32 bit y podria usar un segundo Byte para acarreo del primero pero el formato seria extraño y no seria un entero tal y como deberia ser-
Alguien tuvo este problema? como lo resolvio?
Muchas gracias
Título: Re: Visualizar entero con signo de mas de 32 Bits
Publicado por: cristian_elect en 17 de Agosto de 2011, 11:17:21
Primero en que lemguaje trabajas y que pic usas.
Título: Re: Visualizar entero con signo de mas de 32 Bits
Publicado por: Algec en 17 de Agosto de 2011, 12:55:26
16F788 a 10 Mh, es un LCD de 40 lineas y uso CCS, el problema es que quiero usar un contador de mas de 32 bit, por lo que puedo acarrear en un segundo entero de 32 el overflow del primer byte pero a la hora de visualizar el valor de conteo no s ecomo hacerlo, ya que el segundo Byte seria 1 y el primero o mas bajo seria de nuevo cero pero no seria el valor en entero que deberia reflejar
Creo que lo explica mejor si fuesen dos palabras de 8 bits. El overflow de la primera seria el valor posterior a 256, 1 del segundo Byte y 0 del mas bajo y me indicaria el LCD "10" cuando deberia escribir de alguna forma 257
Me explico en lo que necesito?
Título: Re: Visualizar entero con signo de mas de 32 Bits
Publicado por: mtristan en 17 de Agosto de 2011, 13:54:23
.


Si lo que estás haciendo es un contador, me parece extraño que necesites variables con signo :?. Aún así, al trabajar con variables con signo hay que tener en cuenta que el bit que indica el desbodre de la cuenta es el bit de overflow (que no todos los pic tienen), y no el de acarreo (este sí lo tienen todos). El primero se activa cuando la cuenta pasa de 2^31 a -(2^31+1), en cambio el segundo lo hace cuando pasa de 2^32 a 0.
Para visualizarlos en un lcd, lo más sencillo es tener un grupo de variables que representen unidad, decena, centena, etc, e ir incrementándolas a medida que se va decrementando la cuenta, hasta que esta llega a 0.

Saludos.

Título: Re: Visualizar entero con signo de mas de 32 Bits
Publicado por: Suky en 17 de Agosto de 2011, 14:09:28
Para visualizarlos en un lcd, lo más sencillo es tener un grupo de variables que representen unidad, decena, centena, etc, e ir incrementándolas a medida que se va decrementando la cuenta, hasta que esta llega a 0.

Estoy totalmente de acuerdo, porque implementar una variable de 40-bits (una unión entre un long long + char) y después pasarla a string va a ser un dolor de cabeza.


Saludos!
Título: Re: Visualizar entero con signo de mas de 32 Bits
Publicado por: Algec en 17 de Agosto de 2011, 14:38:05
a ver el contador mide distancias relativas y necesito que mida a + y a -
Ese es parte del tema.Por eso hay que hacerlo con signo.
Ademas operaciones matematicas para ese pic con variables de al menos 40 Bits?
Título: Re: Visualizar entero con signo de mas de 32 Bits
Publicado por: Suky en 17 de Agosto de 2011, 14:53:04
a ver el contador mide distancias relativas y necesito que mida a + y a -
Ese es parte del tema.Por eso hay que hacerlo con signo.
Ademas operaciones matematicas para ese pic con variables de al menos 40 Bits?

De poder se puede, pero tenes que implementarlas vos. En asm es lo más eficiente, pero hay que ponerse a estudiar un poco  :mrgreen: Por ejemplo en C18 implementé lo siguiente, pero todo en C, cuando necesite trabajar con variable de 64-bits:
http://www.micros-designs.com.ar/c18-logica-de-64-bits-suma-resta-multiplicacion-division/

Ahora pasarlo a string  :x


Saludos!
Título: Re: Visualizar entero con signo de mas de 32 Bits
Publicado por: Algec en 17 de Agosto de 2011, 14:57:06
YA tengo cosas para ir mirando
Mil gracias
Título: Re: Visualizar entero con signo de mas de 32 Bits
Publicado por: mtristan en 17 de Agosto de 2011, 16:00:23
.

Si los incrementos/decrementos del contador son de a una unidad por vez, lo más sencillo de implementar es la codificación de signo y magnitud. Solamente hay que reservar un bit (según el "estándar", es el MSB de la variable), y usarlo para representar el signo del número (1: negativo; 0: positivo). El resto de los bits de la variable conforman la magnitud del número representado. Por ej, con 8 bits, el valor 10010001 representaría el número -17. Por supuesto que no hay límite para el tamaño de la variable, y el bit de signo puede ponerse en una variable separada de la magnitud, para trabajar esta simplemente como un número sin signo, donde sí te sirve el bit de acarreo.

Saludos.