Escribir en posiciones impares de EEPROM

Hola, tengo una pequeña duda. Necesito escribir 8 numeros en las primeras 8 posiciones

impares de la memoria EEPROM en un PIC16F84.

He intentado el siguiente código:

Código:
org 0x2100 				; Inicio el origen en la EEPROM
de 0,1,2,3,4,5,6,7,8	; Meto los valores

	org 	0			;vector de reset
	goto	main

	org 	4			;vector de interrupcion
	retfie

main:
	nop
end

Pero este codigo me escribe en las primeras 8 posiciones, sean pares o impares y solo

quiero las impares. Alguien me puede ayudar?Gracias
 
Debido a la ausencia de respuestas y a que ya encontre la solución me contesto a mi mismo:

Sencillamente se puede solucionar, metiendo el valor por defecto en hexadecimal de FF, para no alterar la EEPROM y hacer que permanezca igual.

El codigo seria el siguiente, con un dni de ejemplo como se muestra:

Código:
;***DNI=70582254***
org 0x2100; Inicio el origen en la EEPROM
de 0xFF,7, 0xFF, 0, 0xFF, 5, 0xFF, 8, 0xFF, 2, 0xFF, 2, 0xFF, 5, 0xFF,4; En los huecos pares meto FF

org 0; Vector de reset
goto main
org 4; Vector de interrupción
retfie

main:
         nop
         goto $-1
end

Saludos y ya os traere mas dudas, aunque espero no respondermelas yo mismo.
 
shakaran dijo:
Saludos y ya os traere mas dudas, aunque espero no respondermelas yo mismo.

shakaran entiendo tu fastidio pero a veces no hay tiempo para ingresar al foro y responder. Uno tiene una vida además del foro :D :LOL:

Al menos lo has podido solucionar, eso significa que en tí estaba la respuesta, que con un poco de ingenio lo pudiste resolver y eso es muy bueno. Yo que tú estaría contento de haber podido resolver el tema solo.

Es que así te vas demostrando a ti mismo que puedes y que te las ingenias para resolver cosas. Con el tiempo uno cada vez va realizando cosas mas complicadas para las cuales a veces no hay a quien preguntar porque son cosas muy específicas, o realmente no hay tiempo y hay que resolver las cosas rápido y no se tiene a quien consultar.

Ten paciencia, ya alguno te responderá en otra oportunidad. Entiende que aquí nadie cobra por responder sino que por el contrario, lo hacemos de buena gana para ayudarnos mutuamente.

Un abrazo
 
Gracias, aprecio tu sabia respuesta ;).

Tal vez he sido yo, el que ha sido demasiado exigente al querer que me respondieran tan rapido y me aplico a mi mismo que tambien soy administrador de un foro, que a veces no se tiene todo el tiempo que uno quiere para responder.

Sin embargo, tienes razon, a veces hay que tratar de solucionar las cosas uno mismo y no esperar siempre la respuesta.

Un saludo
 
Hola todos

Shakaran , no entiendo tu ejemplo , me podrias decir como funciona?
si esta en assembler?

Tengo unas dudas para escribir en la EEPROM , el codigo que sale
en Datasheet del PIC16F87XA para escribir la EEPROM, hay registros
en diferentes bancos , y no se ve que los cambian , yo ensaye el codigo
tal cual y en Watch no vi que cambiaran los bits , cambio los bancos
y ahi si cambian los bits , y veo por ejemplo cuando se carga EEADR
con el contenido de W , entonces por que no cambian los bancos en el ejemplo
del Datasheet ?


Si escribo en la EEPROM , cuando quito la alimentacion al PIC , y vuelvo a alimetar
¿puedo saber cuantas posiciones de la EEPROM hay grabada?


Gracias por su ayuda.
 
ohbuiles dijo:
Shakaran , no entiendo tu ejemplo , me podrias decir como funciona?
si esta en assembler?

Es una practica para trabajar con la EEPROM. Simplemente se trata de guardar información en posiciones de memoria impares y no en las impares.

Si por "assembler" te refieres a que si esta escrito en ensamblador. La respuesta es si.

ohbuiles dijo:
Tengo unas dudas para escribir en la EEPROM , el codigo que sale
en Datasheet del PIC16F87XA para escribir la EEPROM, hay registros
en diferentes bancos , y no se ve que los cambian , yo ensaye el codigo
tal cual y en Watch no vi que cambiaran los bits , cambio los bancos
y ahi si cambian los bits , y veo por ejemplo cuando se carga EEADR
con el contenido de W , entonces por que no cambian los bancos en el ejemplo
del Datasheet ?

Con ese PIC no estoy familiarizado, hay no puedo ayudarte, lo siento.

ohbuiles dijo:
Si escribo en la EEPROM , cuando quito la alimentacion al PIC , y vuelvo a alimetar
¿puedo saber cuantas posiciones de la EEPROM hay grabada?

La caracteristica principal que tiene la EEPROM es poder escribir en ella y que los datos permanezcan una vez se quede sin alimentacion (en algun sitio lei, que aguantaba la información hasta 240 años).Por lo tanto, podrias saber cuantas posiciones se hubiesen grabado. Lo que no se es si intentaras quitar la alimentacion, justo en el proceso de grabado, si podria surgir algun tipo de complicacion que estropeara la EEPROM.

Saludos
 
ohbuiles dijo:
Hola todos
Shakaran , no entiendo tu ejemplo , me podrias decir como funciona?
si esta en assembler?

El código de shakaran lo que hace es que ciertos datos que uno quiere que estén grabados en la EEPROM al 'quemarse' el pic, esten en el archivo .HEX No constituye código para grabar o leer eeprom, simplemente es para que en el archivo HEX figuren los datos desados en la posicion de memoria de la eeprom. De esto se encarga el programador.

ohbuiles dijo:
Tengo unas dudas para escribir en la EEPROM , el codigo que sale
en Datasheet del PIC16F87XA para escribir la EEPROM, hay registros
en diferentes bancos , y no se ve que los cambian , yo ensaye el codigo
tal cual y en Watch no vi que cambiaran los bits , cambio los bancos
y ahi si cambian los bits , y veo por ejemplo cuando se carga EEADR
con el contenido de W , entonces por que no cambian los bancos en el ejemplo
del Datasheet ?
Si hay que cambiar de banco varias veces, los registros en cuestion estan en el banco 2 y 3. Puedes postear en que lugar dices que el software tiene un error? Realmente yo usé esas rutinas y no tuve inconvenientes.


ohbuiles dijo:
Si escribo en la EEPROM , cuando quito la alimentacion al PIC , y vuelvo a alimetar ¿puedo saber cuantas posiciones de la EEPROM hay grabada?

No entendi la pregunta
 
ohbuiles dijo:
Si escribo en la EEPROM , cuando quito la alimentacion al PIC , y vuelvo a alimetar
¿puedo saber cuantas posiciones de la EEPROM hay grabada?

Queria decir : Yo grabo unos datos en la EEPROM , apago el PIC , luego vuelvo a encederlo
entonces ahi como se cuantas posiciones hay grabadas , es decir cuantos datos grabe?

Ya hice un programita y me funciono , puse en la primera posicion la cantidad de datos grabados , es decir , cada que grabo un dato tengo que actualizar la primera posicion , como die funciono , pero el profe me puso dos reparos : 1."No es muy eficiente , pues esta continuamente sobreescribiendo la primera posicion" 2."Grabas los dato , bien como los borrar? , ni siquiera puedes sobreescribirlos , los grabas y ahi quedan?

Entonces mi pregunta es como solucionar los dos inconvenientes.

Pongo el programa , hay muchas cositas que no se necesitan en el momento , pero que no estorban , lo de las rutinas del datasheet debe ser la configuracion o menejo del MPLAB y el
Watch , pues ahi no me mostraba la variacion de los bit , que me confirmara que se habia escrito , pero grabe el PIC , y el programa me funciono .

Gracias
 
ohbuiles no alcanzo a entender bien que quieres hacer.

Tu programa graba siempre por alguna razon? O el pic se enciende y empiezar a grabar en la eeprom y luego lo apagas y quieres saber cuantas posiciones grabó? no alcanzo a entender la utilidad de lo que me planteas por eso no entiendo.

Te quiero ayudar pero no puedo si no interpreto bien tu problema.
 
Bueno , el proyecto no es complicado (Para los que sepan) pero para mi , lo es , ya que
apenas empiezo a programar , y son varias las dudas , pero a mi me gusta ir solucionandolas
a medida que se me presentan ; ahi es cuando uno mas aprende , cuando uno le da y le da y nada que funciona , se van corrigiendo errores , se pregunta (En foros por ejemplo) se miran
libros etc ; y se van dando las cosas ; y cuando finalmente funcionan , se siente una sensacion placentera , no importa lo simple del logro .

La duda primordial era que cuando grabo datos en la EEPROM y quito la alimentacion del PIC
es decir retiro del Board , ó el positivo(+) ó el negativo(-) de la fuente de alimentacion
, luego vuelvo a conectar , como me daba cuenta cuantos datos se grabaron en le EEPROM?

Ahor asi subo el programa que realice , que como les dije utilice la primera posicion de la EEPROM para guardar el numero de datos que grabe en la EEPROM , y ahi va el primer reparo del profe , el me dice que se esta sobreescribiendo constantemente (una vez por cada dato grabado) la primera posicion de la EEPROM , y que esto no es eficiente cuando una aplicacion tenga que utilizxar la EEPROM constantemente . El segundo reparo es que mi programa escribe en la EEPROM pero no se como borrar los datos (por el momento solo utilizo un display y datos de un digito) por ejemplo yo grabo 2,9,5,6 en la EPROM
osea que la primera posicion debe contener el 5 (numero de datos) y las siguientes cuatro
los datos 2,9,5,6 . Apago el micro y vuelvo a encender : 1)No se cuantos datos grabe , mi programa no me lo dice. 2)No puedo borrar los datos que grabe.

Entonce , la pregunta es que le adicicono a mi programma para resolver:

1)Saber cuantos datos grabe (Por ejemplo que al inicio del programa
ó al presionar cierta tecla , me muestre el numero de datos grabados
2)Como hago para borrar los datos?


Para la segunda , creo que seria facil borrarlos todos ; lo que no es muy util . Se
me ocurre para borrar , que con cierta tecla ó combinacion de teclas se le indique al micro que quiero borrar datos entonces le doy la direccion ó posicion del dato que quiero borrar
o que me muestre secuencialmente los datos que hay y en cada uno espere la confirmacion de si se borra o no , voy a ver si se puede esto.

Espero haber sido claro , bueno yo se que no mucho , lo que si espero es que me entiendan

Gracias
 

Adjuntos

  • eeprom_120.doc
    43 KB · Visitas: 65
Atrás
Arriba