TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: cyberman123 en 06 de Junio de 2010, 10:42:42

Título: Como puedo manejar un numero mayor a 255 en un pic16f877a
Publicado por: cyberman123 en 06 de Junio de 2010, 10:42:42
Hola a todos...

estuve buscando en el foro y la verdad no encontre nada puntual sobre el tema... el problema es el siguiente: estoy haciendo una especie de juego en el que el jugador escoje el puntaje maximo y va jugando turnos sumando puntajes... el juego se acaba hasta que el puntaje del jugador alcanza el puntaje maximo que el mismo escojio con anterioridad... el problema radica en que el puntaje puede ser desde 0 hasta 999, pero como ya saben el pic 16f877a trabaja con registros de 8 bits por lo tanto no puedo trabajar con numeros mayores a 255...

tenia una idea de separar los numeros en centena, decenas y unidades... pero no me sirvio porque solo podria separar numeros menores a 8 bits...

cualquier informacion que tengan o ejemplos me ayudaria mucho...

he buscado y solo encuentro informacion parecida pero en asm, y se casi nada sobre assembler

Gracias de antemano  ;-)
Título: Re: Como puedo manejar un numero mayor a 255 en un pic16f877a
Publicado por: MLO__ en 06 de Junio de 2010, 11:21:04
En que lenguaje? Si es C, declara la variable como long
Título: Re: Como puedo manejar un numero mayor a 255 en un pic16f877a
Publicado por: cyberman123 en 06 de Junio de 2010, 12:10:22
Oye muchas gracias me solucionaste el problema.. y si, si es C... habia puesto el mensaje en el foro de C pero lo movieron para aca...

De casualidad sabes como funciona eso??... porq los registros son de 8 bits, como es posible manejar mas de 8??
Título: Re: Como puedo manejar un numero mayor a 255 en un pic16f877a
Publicado por: MLO__ en 06 de Junio de 2010, 12:22:24
Hola.

Lo que se hace es concatenar los registros.
Título: Re: Como puedo manejar un numero mayor a 255 en un pic16f877a
Publicado por: willynovi en 06 de Junio de 2010, 12:42:20
imagino que concatenando registro es la forma que maneja los long internamente el C, no me he puesto a investigar eso.

De todas formas, se me ocurre que es un manera simple y eficientes usar dos registros, y podrias tener cuenta hasta 16 bit, poco mas de 65000 para el puntaje.

Como haces esto?, inicias ambos contadores (registros) a 0, empiezas a contar en el registro bajo, desde 0 a 255, cuando este llega a 256, lo que haces es incrementar el siguiente registro en uno y inicias la cuenta nuevamente en el registro bajo, hasta que se sobrecargue nuevamente e incrementas el registro alto, asi sucesivamente.
Título: Re: Como puedo manejar un numero mayor a 255 en un pic16f877a
Publicado por: Leon Pic en 06 de Junio de 2010, 12:48:20
Si willy, así se hace en ASM y es lo que hace C en registros de 8 bit.
Título: Re: Como puedo manejar un numero mayor a 255 en un pic16f877a
Publicado por: migsantiago en 06 de Junio de 2010, 13:01:20
Oye muchas gracias me solucionaste el problema.. y si, si es C... habia puesto el mensaje en el foro de C pero lo movieron para aca...

De casualidad sabes como funciona eso??... porq los registros son de 8 bits, como es posible manejar mas de 8??

Disculpa, yo lo moví. Tu primer mensaje hablaba sólo de ASM y asumí que quedaría mejor en otro lado. Ahora mismo lo regreso al subforo de C.
Título: Re: Como puedo manejar un numero mayor a 255 en un pic16f877a
Publicado por: cyberman123 en 11 de Junio de 2010, 00:03:15
Oye muchas gracias me solucionaste el problema.. y si, si es C... habia puesto el mensaje en el foro de C pero lo movieron para aca...

De casualidad sabes como funciona eso??... porq los registros son de 8 bits, como es posible manejar mas de 8??

Disculpa, yo lo moví. Tu primer mensaje hablaba sólo de ASM y asumí que quedaría mejor en otro lado. Ahora mismo lo regreso al subforo de C.

No te preocupes migsantiago... y muchas gracias por ayudarme con esto, me estaba matando la cabeza pensando la forma de incrementar el registro alto cuando se debordara el bajo, siendo que solo se necesitaba definir una variable de tipo long