EEPROM PIC Memoria interna


Compartir: Share on Facebook11Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0

EEPROM PIC en la memoria interna EEPROM del microcontrolador PIC se pueden guardar datos que no se quiere que se borren en caso se corte la alimentación del PIC, en esta sección se comentará para el caso de la memoria EEPROM PIC para el PIC16F877A, lo que aquí se comente es muy similar en caso de utilizar otro microcontrolador PIC, siempre tener a mano la hoja de datos del PIC utilizado, en la memoria EEPROM PIC del PIC16F877A se pueden almacenar hasta 256 bytes, esto es 256 datos de 8 bits, la capacidad de la memoria EEPROM PIC puede variar de un PIC a otro.

Para la escritura y la lectura de datos en la EEPROM PIC se tienen que seguir una serie de pasos, en el orden que viene indicado en la hoja de datos del PIC.

EEPROM PIC REGISTROS

Los registros utilizados para el manejo de la EEPROM PIC del PIC16F877A son el registro EECON1, el registro EECON2, el registro EEDATA, el registro EEDATH, el registro EEADR y el registro EEADRH, en el caso de utilizar las interrupciones por finalización de  escritura de la EEPROM PIC también se utilizarán los registros PIE2 y PIR2.

El registro EECON1 este es el registro de control de la memoria EEPROM PIC

EEPROM PIC EECON1

El bit7 EEPGD para programar dentro de la memoria EEPROM PIC este bit tiene que ser puesto a 0, cuando este bit se pone a 1 será para programar en la memoria FLASH.

Los bits 6, 5, y 4 no son utilizados.

El bit3 WRERR este bit se pondrá automáticamente a 1 si ocurre algún reset mientras se esta escribiendo en la EEPROM PIC, al ocurrir el reset el dato no se escribirá correctamente, por lo que este bit indicará un error de escritura.

El bit2 WREN al poner a 1 este bit se habilita la escritura en la EEPROM PIC, al ponerlo a 0 la escritura en la EEPROM estará inhabilitada.

El bit1 WR al poner este bit a 1 se inicia la escritura en la EEPROM PIC, una vez que la escritura a terminado este bit se pondrá automáticamente a 0, se puede utilizar este bit para detectar cuando la escritura en la EEPROM a terminado, al finalizar la escritura también puede producirse una interrupción si esta se encuentra habilitada, si no también puede utilizarse la bandera de interrupción, el bit4 EEIF del registro PIR2 para detectar cuando se ha finalizado la escritura en la EEPROM PIC

El bit0 RD al poner este bit a 1 se inicia la lectura en la EEPROM PIC, una vez que la lectura a terminado este bit se pondrá automáticamente a 0.

El registro EECON2 este registro no es accesible, es un registro auxiliar para la escritura en la EEPROM PIC.

Los registros EEDATA y EEDATH juntos hacen un solo registro donde se cargará el dato que se quiere escribir en la EEPROM PIC, será el registro desde el programa colocará el dato que se quiera leer desde la EEPROM PIC.

Los registros EEADR y EEADRH juntos hacen un solo registro donde se cargará la dirección de la EEPROM PIC desde donde se quiere leer el dato, o donde se quiere escribir el dato.

EEPROM PIC Pasos a seguir en su programación en el XC8

Se comenta  lo que se hará para escribir o leer en la EEPROM PIC, los pasos a seguir son  los indicados en la hoja de datos del PIC16F877A.

Escritura en la EEPROM PIC para la secuencia a seguir sl escribir un byte en la EEPROM PIC con el XC8 se seguirá lo que indica la hoja de datos:

  1. Comprobar si hay alguna escritura en curso, esto se puede hacer leyendo el bit WR del registro EECON1, si está a 1 es porque hay una escritura en curso. Si hay alguna escritura en curso se tendrá que esperar que esta termine.
  2. En el registro EEADR cargar la dirección de la EEPROM PIC donde se quiera escribir, para el PIC16F877A estas direcciones están entre 0 y 256.
  3. En el registro EEDATA se carga el dato que se quiere escribir en la EEPROM PIC.
  4. El bit7 EEPGD del registro EECON1 se pone a 0 para que programar en la EEPROM PIC.
  5. El bit2 WREN del registro EECON1 se pone a 1 para habilitar la escritura en la EEPROM PIC.
  6. Deshabilitar las interrupciones poniendo el bit7 GIE del registro INTCON a 0.
  7. Cargar el registro EECON2 con 0x55.
  8. Cargar el registro EECON2 con 0xaa.
  9. El bit7 WR del registro EECON1 se pone a 1 para que inicie la escritura en la EEPROM PIC.
  10. Habilitar las interrupciones poniendo el bit7 GIE del registro INTCON a 1.
  11. El bit2 WREN del registro EECON1 se pone a 0 para deshabilitar el uso de la EEPROM PIC.
  12. Comprobar si la escritura a terminado, esto se puede hacer leyendo el bit WR del registro EECON1, si está a 0 es porque la escritura a terminado, también se puede leer la bandera de interrupción (bit4 EEIF del registro PIR2), si está a 1 es porque la escritura a terminado, al finalizar la escritura está bandera tiene que ser puesta a 0, al utilizar la bandera de interrupción no será necesario verificar el paso 1.

Lectura de la EEPROM PIC la secuencia a seguir para leer un byte desde la EEPROM PIC según indica la hoja de datos es la siguiente:

  1. En el registro EEADR cargar la dirección de la EEPROM PIC donde se quiera escribir, para el PIC16F877A estas direcciones están entre 0 y 256.
  2. El bit7 EEPGD del registro EECON1 se pone a 0 para que programar en la EEPROM PIC.
  3. El bit7 RD del registro EECON1 se pone a 1 para que inicie la lectura en la EEPROM PIC.
  4. Leer el dato de la dirección indicada, este dato se puede leer desde el registro EEDATA.

EEPROM PIC EN EL XC8

Se crearán dos funciones para ser utilizadas en la escritura u la lectura de la EEPROM PIC, las funciones están realizadas siguiendo los pasos indicados por la hoja de datos.

Escritura en la EEPROM PIC, para la escritura se utilizará una función a la que se llamará escribir_eeprom(dirección,dato), se le puede llamar como se desee, se le darán dos parámetros, el primero será la dirección de la EEPROM PIC donde se quiera escribir el dato, y el segundo el dato que se quiera escribir en la dirección indicada, la función realizada en el XC8 es la siguiente:

Lectura de la EEPROM PIC, para la lectura se utilizará una función a la que se llamará leer_eeprom(dirección), se le puede llamar como se desee, se le dará un parámetro que será la dirección de la EEPROM PIC de donde se quiera leer el dato, la función realizada en el XC8 es la siguiente:

EEPROM PIC EN EL XC8 EJEMPLO

En el ejemplo a realizar se escribirá en la memoria EEPROM PIC del microcontrolador PIC16F877A, desde la dirección de memoria EEPROM 0 hasta la dirección 255 las mismas posiciones de memoria que tengan, luego se leerán estos valores de las posiciones de memoria, estos valores serán vistos en forma binaria en unos leds conectados al puerto D.

El circuito utilizado es el siguiente:

EEPROM PIC ejemplo

El programa realizado en el XC8 para la escritura y lectura de la memoria interna EEPROM PIC es el siguiente:

Si he logrado ayudarte en cuanto a la utilización de la memoria interna EEPROM PIC, comparte este enlace para poder ayudar a muchas personas mas. Muchas Gracias.

Atte MrElberni.

Compartir: Share on Facebook11Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0