TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: AABHGA en 13 de Septiembre de 2006, 21:47:13
-
Hola, otra vez yo xD :D, tengo un pequeño problema, y es que necesito almacenar una variable en la EEPROM de mi 16F877 y luego desde el programa, poderla leer y/o modificar, he aquí el código.
PASSREAD VAR WORD
PASSIN VAR WORD
PASSOUT VAR WORD
Con este grabo dicho valor a la hora de programar, es un valor en decimal
EEPROM 20, [1111]
Con este lo leo y lo muestro en el LCD, solo que me muesta un 87
READ 20, PASSREAD
LCDOUT $FE, 1, #PASSREAD
Cuando he ingresado el código con el teclado y le digo que lo muestre, me muesta un 1111, pero cuando lo quiero comparar con lo que esta en la memoria no coincide y no trabaja, alguien sabe ¿cómo debo grabar el famoso 1111 en la memoria o como debo leerlo para que sea un 1111 no un 87 (ese 87 vienen siendo los últimos 8 bits de 1111 en binario)?
-
Hola:
para almacenar valores en la eeprom esta bien la funcion EEPROM puedes leer las posicioes de la Eeprom utilizando:
asi comparas ese valor con el que desees.
Y si quieres comparar valores numericos de diferentes tipos utiliza los operadores correspondientes, si quieres binario, utiliza %, para hexadecimal $ y el decimal sin operador.
-
Si, el problema es cuando leo el valor de la EEPROM, cuando asigno lo que hay en la posición 20 (que es el 1111 que grabé) a la variable PASSREAD, esta toma el valor de 87 y no del 1111, ahi es donde radica mi problema.,
-
Hola:
Pon el codigo que estas utilizando para mirarlo.
-
Aquí está:
PASSREAD VAR WORD
PASSIN VAR WORD
EEPROM 20, [1111]
READ 20, PASSREAD
LCDOUT $FE, 1, #PASSREAD
y en el LCD veo un 87, lo que me hace pensar que almacena solo 8 bits en la eeprom, porque:
10001010111 ===> 1111
00001010111 ===> 0087
Ademas cuando ingreso el numero para comparar con el teclado y lo grabo en la variable PASSIN y luego lo muestro en el LCD ahi si me aparece el 1111.
-
Hola:
Pues si, la eeprom del micro es solo de 8 bits, no me di cuenta que estabas guardando un decimal 1111, pense que estabas grabando un binario %1111, disculpas no me di cuenta, no puedes sobrepasar los 8 bits, en este caso de 0 a 255, nada mas, en una sola posicion de memoria por supuesto.
-
Mier...., entonces tengo que utilizar 2 variables, voy a ver como diablos me las ingenio. gracias nuevamente Lord y disculpa tanta joda.
-
Hola:
Lo que puedes hacer es ver como hacer para partir ese valor en dos bytes y guardarlo en dos posiciones de memoria, y asi mismo leer las posiciones de memoria y luego unir el dato de nuevo.
-
Si, ya pude, utilizé 2 EEPROM para grabarlas al programar y 2 variables mas cuando el programa en sus funciones la graba, no fue tan complicado, 2 IF haciendo que cada uno grabara un valor de 2 dígitos decimales en cada una de las variables, cuando lo termine de depurar pego el código por si alguien lo puede necesitar.
-
Hola.
AABHGA, aunque ya solucionaste tu problema, quizá puedas mirar este código, puede que te ayude.
http://www.microengineeringlabs.com/resources/samples/pbp/eeword.bas
-
Gracias por el código mario, el proceso es muy similar a como yo lo hize, con la diferencia que yo almaceno y leo todo de un solo paso (así lo requiero en el programa).