Вы находитесь на странице: 1из 6

MEMORIA EEPROM DE DATOS

En algunos proyectos es necesario guardar la informacin que se genera durante el proceso de una forma
permanente, es decir, esos datos han de permanecer incluso cuando el sistema se desconecta de la
alimentacin. Para realizar esta funcin los microcontroladores PTC disponen de un rea de datos
EEPROM no voltil.
El PIC16F84 dispone de una zona con 64 bytes de memoria EEPROM para almacenar datos que no se
pierden al desconectar la alimentacin. Esto es muy til ya que permite guardar datos permanentemente.
La figura 7-1 muestra la estructura de esta memoria y los registros asociados.

Figura 7. 1 Memoria EEPROM de datos en el PIC16F84


Como en cualquier otra memoria EEPROM se pueden realizar dos tipos de operaciones:
Operacin de lectura.
Operacin de escritura o grabacin.
Un ciclo de grabacin en una posicin EEPROM de datos dura unos 10 ms, un tiempo muy elevado para
la velocidad del procesador, que se controla mediante un temporizador interno. Al escribir en una
posicin de memoria ya ocupada, automticamente se borra el contenido que haba y se introduce el
nuevo dato, por lo que no hay comando de borrado.
El PIC16F84 soporta un milln de ciclos de escritura/borrado de su memoria EEPROM de datos y es
capaz de guardar la informacin inalterada durante ms de 40 aos.
Esta memoria no forma parte del espacio direccionable y slo es accesible para lectura y escritura a travs
de registros. Los registros relacionados con esta memoria EEPROM de datos son:
EEDATA (EEPROM Data Register). Contiene los bytes que se van a escribir o que se han ledo de la
EEPROM de datos.
EEADR (EEPROM Address Register). Contiene la direccin de la EEPROM de datos a la que se va
a acceder para leer o escribir. Las 64 posiciones de memoria EEPROM ocupan las direcciones de un
mapa que comienza en la posicin 00h y termina en la 3Fh, por lo que los dos bits de ms peso de
este registro siempre valen 0.
EECON1 (EEPROM Control Register 1). Los bits de este registro definen el modo de
funcionamiento de esta memoria (tabla 7-1). Los bits RD y WR del EECON1 indican
respectivamente lectura o escritura. No hay que ponerlos a 0, slo a 1, ya que se borran
automticamente cuando la operacin de lectura o escritura ha sido completada.
EECON2 (EEPROM Control Register 2). Este registro no est implementado fsicamente, por lo que
es imposible leerlo (si se intenta leer, todos sus bits se leen como ceros). Se emplea como dispositivo
de seguridad durante el proceso.
7.1 REGISTRO EECON1

Es el registro para el control de la memoria EEPROM de datos. Se encuentra en la posicin 88h del
Banco 1. Slo destina cinco bits para este control:

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

EEIF

WRERR

WREN

WR

RD

Tabla 7. 1: Registro EECON1

RD (Read Control Bit). Bit de control de lectura en la EEPROM. Al ponerlo en 1 se inicia la


lectura de un byte en la EEPROM de datos. Este bit se limpia (se pone a 0) por hardware
automticamente al finalizar la lectura de la posicin EEPROM.
o RD = 0. No inicia la lectura de la EEPROM o la misma ha terminado.
o RD = 1. Inicia la lectura de la EEPROM. Se borra por hardware.
WR (Write Control Bit). Bit de control de escritura en la EEPROM. Al ponerlo en 1 se inicia una
escritura de un byte en la EEPROM de datos. Este bit se limpia (se pone en 0) por hardware
automticamente una vez la escritura de la EEPROM ha terminado.
o WR = 0. No inicia la escritura de la EEPROM o la misma ha terminado.
o WR = 1. Inicia la escritura de la EEPROM. Se borra por hardware.
WREN (EEPROM Write Enable bit). Permiso de escritura en la EEPROM.
o WREN = 0. Prohbe la escritura de la EEPROM.
o WREN = 1. Permite la escritura de la EEPROM.
WRERR (EEPROM Write Error Flag Bit). Flag de error en la escritura. Se posiciona a 1 cuando la
operacin de escritura termina prematuramente debido a cualquier condicin de reset.
o WRERR = 0. La operacin de escritura se ha completado correctamente.
o WRERR = 1. La operacin de escritura ha terminado prematuramente.
EEIF (EEPROM Write Operation Interrupt Flag Bit). Flag de estado de interrupcin por finalizacin
de escritura en EEPROM. Seala el final con xito de la operacin de escritura de un byte en la
EEPROM.
o EEIF = 0. La operacin de escritura de la EEPROM no ha terminado o no comenz.
o EEIF = 1. La operacin de escritura de la EEPROM ha terminado. Debe borrarse por
software.
Bits 5, 6 y 7 (Unimplemented). No implementados fsicamente. Se leen como 0.

7.2 LIBRERA DE SUBRUTINAS


Una posible librera con las subrutinas que permiten realizar las tareas bsicas de control en la memoria
EEPROM es la EEPROM.INC donde destacan las subrutinas:
EEPROMLeeDato. El microcontrolador lee el dato que hay escrito en la posicin de la EEPROM
de datos del PIC apuntada por el contenido del registro de trabajo W. El resultado se proporciona en
el registro de trabajo W.
EEPROMEscribeDato. Escribe el dato introducido en el registro de trabajo W en la posicin de
memoria EEPROM apuntada por el registro EEADR.
Esta librera suficientemente documentada se detalla a continuacin:
;*****************************Librera "EEPROM.INC" **********************************
;
; Estas subrutinas permiten realizar las tareas bsicas de escritura y lectura de la
; memoria EEPROM de datos del PIC.
;
; Subrutina "EEPROM_LeeDato" ----------------------------------------------------------;
; El microcontrolador lee el dato que hay escrito en la posicin de la EEPROM del PIC
apuntada
; por el contenido del registro de trabajo W. El resultado se proporciona en el mismo W.
;
; Entrada: En (W) la direccin de la memoria EEPROM a leer.
; Salida : En (W) el byte ledo.
EEPROM_LeeDato
bcf
STATUS,RP0

; Asegura que trabaja con el Banco 0.

movwf EEADR
bsf
STATUS,RP0
bsf
EECON1,RD
EEPROM_SigueLeyendo
btfsc EECON1,RD
goto
EEPROM_SigueLeyendo
bcf
STATUS,RP0
movf
EEDATA,W
return

; Direccin a leer.
; Banco 1.
; Orden de lectura.
;
;
;
;

El PIC indica que ha terminado la lectura


poniendo en bajo este bit.
Banco 0.
El byte ledo al registro W.

; Subrutina "EEPROM_EscribeDato" ------------------------------------------------------;


; Escribe el dato introducido en el registro de trabajo W en la posicin de memoria
EEPROM del
; PIC apuntada por el registro EEADR.
;
; Como altera el valor del registro INTCON al posicionar el flag GIE, ste se debe
guardar al
; principio de la subrutina y restaurarlo al final.
;
; Entradas:
En el registro EEADR la direccin de la memoria EEPROM a escribir.
;
En el registro W el byte a escribir.
;
CBLOCK
EEPROM_GuardaINTCON
ENDC
EEPROM_EscribeDato
bcf
STATUS,RP0
;
movwf EEDATA
;
movf
INTCON,W
;
movwf EEPROM_GuardaINTCON
bsf
STATUS,RP0
;
bcf
INTCON,GIE
;
bsf
EECON1,WREN
;
;
; El fabricante especifica que hay que
;
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2
bsf
EECON1,WR
;
EEPROM_TerminaEscribir
btfsc EECON1,WR
;
goto
EEPROM_TerminaEscribir
bcf
EECON1,WREN
;
bcf
EECON1,EEIF
;
bcf
STATUS,RP0
;
movf
EEPROM_GuardaINTCON,W ;
movwf INTCON
return

Asegura que trabaja con el Banco 0.


El byte a escribir.
Reserva el valor anterior de INTCON
Acceso al Banco 1.
Deshabilita todas las interrupciones.
Habilita escritura.
seguir esta secuencia para escritura en EEPROM:

Inicia la escritura.
Comprueba que termina de escribir en la EEPROM.
Desautoriza la escritura en EEPROM.
Limpia este flag.
Acceso al Banco 0.
Restaura el valor anterior de INTCON.

7.3 LECTURA DE LA EEPROM DE DATOS


El proceso de lectura de una posicin de memoria de la EEPROM est especificado en la subrutina
EEPROM LeeDato y comprende los siguientes pasos:
1. El registro EEADR debe contener la posicin de memoria a leer.
2. Se pone a 1 del bit RD del registro EECON1.
3. Espera a que termine la operacin de lectura, en la cual el microcontrolador pone a 0 el bit
RD.
4. Lectura en el registro EEDATA del dato direccionado.
Teniendo en cuenta la velocidad de funcionamiento de esta memoria, el dato est disponible en EEDATA
despus de que el bit RD se ponga a 1, por lo que es posible leerlo mediante la instruccin que sigue
inmediatamente despus.
7.4 ESCRITURA EN LA EEPROM DE DATOS
La escritura en esta memoria consiste en realidad en una grabacin ya que se est trabajando con una
EEPROM, es algo mas complicada por evidentes razones de seguridad. Este proceso est especificado en
la subrutina EEPROM_EscribeDato y comprende los siguientes pasos:

1.
2.
3.
4.

Se carga en el registro EEDATA el dato a grabar.


Se carga en EEADR la direccin de la posicin a escribir.
Microchip recomienda deshabilitar las interrupciones durante la secuencia de escritura.
Se ejecuta la siguiente secuencia para iniciar la escritura de cada byte:
movlw
movwf
movlw
movwf
bsf

5.
6.

0x55
EECON2
0xAA
EECON2
EECON1,WR

; Inicia la escritura.

Esta ltima instruccin inicia el proceso de escritura propiamente dicho. Cuando se termina la
escritura, el bit EEIF del registro EECON1 se pone a 1. Al acabar el proceso, el bit WR se
pone a 0 automticamente.
Mediante programa, hay que deshabilitar la escritura y poner a 0 el bit EEIF del EECON1.

7.5 DIRECTIVA DE
La directiva DE (Declare EEPROMData Byte) reserva palabras de memoria de 8 bits dentro de la
memoria EEPROM de datos, asignndole un valor. Cada expresin reserva un valor de 8 bits y cada
carcter de una frase se guarda en una posicin separada. Cuando se usa esta directiva debe fijarse un
origen en 2100h para su uso con grabadores.
Ejemplo:
ORG

0x2100

DE

0x00

; Corresponde a la direccin 0 de la zona EEPROM


; de datos.
; El contador en principio a cero.

7.6 VENTANA EEPROM EN EL MPLAB


En el simulador del MPLAB el contenido de la memoria EEPROM puede verse seleccionando la opcin
View > EEPROM As, por ejemplo, una vez ensamblado el fragmento de programa del ejemplo de la
seccin anterior, se visualizara como se indica en la figura 7-2.

Figura 7. 2
7.8 PROGRAMA EJEMPLO
El siguiente programa es un ejemplo para una mejor comprensin de la utilizacin de este recurso,
aplicado al esquema de la figura 7-3.

Figura 7. 3

;************************************EEPROM_01.asm *********************************
;
;
; Este programa comprueba el funcionamiento de la lectura y escritura en la memoria
EEPROM de
; datos. Cada vez que el sistema es reseteado se incrementa un contador que se guarda en
la
; primera posicin de la memoria EEPROM de datos del PIC y es visualizado en el modulo
LCD.
;
; ZONA DE DATOS **********************************************************************
__CONFIG
_CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST
P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK
0x0C
Contador
ENDC
ORG

0x2100

DE

0x00

; Corresponde a la direccin 0 de la zona EEPROM


; de datos.
; El contador en principio a cero.

; ZONA DE CDIGOS ********************************************************************


ORG

; El programa comienza en la direccin 0.

Inicio
call
clrw
call
movwf
call
call
movlw
call
incf
movf
call
Principal
sleep

LCD_Inicializa
; Leer la primera posicin de memoria EEPROM.
EEPROM_LeeDato
Contador
BIN_a_BCD
LCD_Byte
MensajeReseteado
LCD_Mensaje
Contador,F
Contador,W
EEPROM_EscribeDato

; Se guarda en Contador.
; Se visualiza en BCD
; con nibble alto apagado si es cero.
; Se incrementa.
; Ahora se graba en la EEPROM de datos.
; Pasa a modo de reposo.

goto

Principal

; "Mensajes" --------------------------------------------------------------------------;
Mensajes
addwf PCL,F
MensajeReseteado
DT " reseteados.
", 0x00
FinMensajes
INCLUDE
INCLUDE
INCLUDE
INCLUDE
INCLUDE
END

<EEPROM.INC>
<RETARDOS.INC>
<BIN_BCD.INC>
<LCD_4BIT.INC>
<LCD_MENS.INC>

; Subrutinas bsicas de control de la EEPROM de


; datos del PIC.

Вам также может понравиться