Sie sind auf Seite 1von 8

Memoria de datos EEPROM

Esta memoria est basada en tecnologa EEPROM, y tiene una longitud de 8 bits, del mismo modo que la memoria de datos. Su tamao es de 64 bytes y est situada en un bloque distinto y aislado de la de datos.

Los 64 bytes EEPROM de Memoria de Datos no forman parte del espacio normal direccionable, y slo es accesible en lectura y escritura a travs de dos registros, para los datos el EEDATA que se encuentra en la posicin 0008h del banco de registros RAM y para las direcciones el EEADR en la 0009h. Para definir el modo de funcionamiento de esta memoria se emplean dos registros especiales, el EECON1 en la direccin 0088h y el EECON2 en 0089h.

Registros que se utilizan con la EEPROM: Registro EEDATA (08h): Registro de Datos, lectura/escritura 8 bits Registro EEADR (09h): Registro de Direccin, de 0h a 3Fh, 64 bytes Registro EECON1 (88h): Registro de Control 1 Registro EECON2 (89h): Registro de Control 2 (no es un registro fsico)

Esta memoria no emplea ningn recurso externo de alimentacin. Puede grabarse desde un programador de PIC al igual que el cdigo de programa.

La lectura de una posicin de la memoria se obtiene en el registro EEDATA en el prximo ciclo de reloj, si bien podra tardar algo mas.

La escritura es mucho mas lenta, tardandose del orden de unos 8 ms. Esta se controla mediante un temporizador interno.

Resumen de caractersticas: Memoria de datos de 64 bytes. Lectura rpida de un byte (en el tiempo de uno o varios ciclos de instruccin). Escritura de un byte en unos 8 ms.

Se genera una interrupcin cuando se completa la escritura de la memoria. 1.000.000 de ciclos de borrado/escritura. 40 aos de retencin de datos. Tecnologa de baja potencia y alta velocidad CMOS.

Cuando el dispositivo est protegido por cdigo, la CPU puede continuar leyendo y escribiendo en la memoria EEPROM, pero el programador del dispositivo ya no puede acceder esta memoria. DISPOSITIVOS LGICOS MICROPROGRAMABLES El PIC16F84A 5.10

Uso de la EEPROM

A continuacin veremos a fondo cuales son los procesos ms usuales de escritura y de lectura en la EEPROM. Lectura de la memoria EEPROM

Para leer de la memoria EEPROM han de seguirse los siguientes pasos: Escritura de la direccin que hay que leer en el registro EEADR. Poner a 1 el bit RD del registro EECON, para habilitar la lectura. Lectura del dato ledo y espera a que termine la operacin. El dato est disponible en el registro EEDATA.

Veamos dos ejemplos prctico. El primero (LECTURA1) presupone que el dato en EEDATA estar disponible rpidamente, y el segundo (LECTURA2) espera hasta confirmarlo: LECTURA1 BCF STATUS,RP0 MEM1 EEADR ; Selecciona banco 0 ; Direccin a leer de ; la EEPROM ; Selecciona banco 1 ; Activar lectura

MOVLW MOVWF BSF BSF

STATUS,RP0 EECON1,RD

BCF

STATUS,RP0

; Selecciona banco 0 ; W se carga con el valor ; ledo en eeprom

MOVF EEDATA,W

LECTURA2

BCF

STATUS,RP0 MEM1 EEADR

; Selecciona banco 0 ; Direccin a leer de ; la EEPROM ; Selecciona banco 1 ; Activar lectura ; Espera final de lectura ; a que baje la bandera ; Selecciona banco 0 ; W se carga con el valor ; ledo en eeprom

MOVLW MOVWF BSF BSF ESPERA

STATUS,RP0 EECON1,RD

BTFSC EECON1,RD GOTO ESPERA BCF STATUS,RP0

MOVF EEDATA,W

La memoria EEPROM es bastante lenta, por lo cual es importante esperar a que el ciclo de lectura termine, aunque algunas veces se omita. Pero es an ms importante esta espera en el ciclo de escritura, ya que la EEPROM puede tardar en ser escrita hasta 10 ms. Escritura de la memoria EEPROM

El proceso de escritura es an ms complejo ya que deberemos hacer todo lo anterior y adems escribir un cdigo especial de proteccin. Estos pasos los vemos en las siguientes lneas: Poner a 1 (si no lo estaba) el bit WREN del registro EECON1 para habilitar la operacin de escritura. Cargar en EEADR la direccin de la posicin a escribir. Cargar en el registro EEDATA el valor a grabar.

Ejecutar la siguiente secuencia que inicia la escritura de cada byte y adems sirve de proteccin frente a errores eventuales. Esta secuencia siempre es la misma y ha de ejecutarse siempre. MOVLW MOVWF MOVWF MOVWF BSF 55H EECON2 AAH EECON2 EECON1,WR ; Escribe AAh en EECON2 ; Escribe 55h en EECON2

; Coloca a 1 el bit de escritura

Esta ltima instruccin inicia el proceso de escritura. Cuando se termina, el bit EEIF est a 1 y, si ha sido habilitada la interrupcin de EEPROM haciendo uso del bit EEIE del registro INTCON, esta interrupcin se genera. Mediante software es necesario poner a cero el bit EEIF. DISPOSITIVOS LGICOS MICROPROGRAMABLES El PIC16F84A 5.11

Veamos un ejemplo de escritura tpico que no utiliza interrupciones: ESCRITURA ; Establecer EEADR y EEDATA MOVLW MOVWF MOVLW MOVWF BSF BSF DIRMEN1 EEADR DATO1 EEDATA ; Se escribe el dato en EEDATA ; Escribe la direccin en EEADR

STATUS,RP0

; Selecciona el banco 1

EECON1,WREN ; Permiso de escritura activado

;Comienzo de la secuencia de escritura MOVLW MOVWF MOVLW MOVWF BSF 0x55 EECON2 0xAA EECON2 ; Se escribe AA h en EECON2 ; Se escribe el dato 55 h en EECON2

EECON1,WR

; Comienza la escritura

BCF ESPERA

EECON1,WREN ; Permiso de escritura desactivado ; Espera a que termine la escritura

BTFSC EECON1,WR GOTO ESPERA BCF STATUS,R0

; Selecciona el banco 0

La escritura de cada byte no se iniciar si la secuencia de introducir 55 y AA en EECON2, y activar el bit WR no se sigue exactamente.

Considerndo lo anterior, es recomendable que durante la secuencia de inicio de escritura se deshabiliten las interrupciones, con el fin de evitar errores no deseados y habilitarlas posteriormente si van a ser utilizadas.

Adicionalmente, el bit WREN de EECON1 debe ser activado para habilitar la escritura. Para evitar errores, tambin es recomendable que el bit WREN est desactivado durante todo el programa excepto en el momento de la escritura. Debemos tener en cuenta que este bit no se pone a cero automticamente mediante hardware. Una vez iniciado el ciclo de escritura, si ponemos a cero WREN, esto no afectar a el ciclo de escritura iniciado. En este caso el bit WR estar inhibido y no se podr poner a uno.

Despus del ciclo, el bit WR es puesto a cero por hardware y el EEIF es puesto a uno (si EEIE lo est). Si EEIE, est habilitado, EEIF debe ser puesto a cero por software.

Veamos un ejemplo de escritura tpico que utiliza interrupciones: ESCRITURA BCF STATUS,RP0 ; Selecciona el banco 0

; Establecer EEADR y EEDATA MOVLW MOVWF MOVLW MOVWF BSF BSF MEN1 EEADR DATO1 EEDATA ; Se escribe el dato en EEDATA ; Escribe la direccin en EEADR

STATUS,RP0

; Selecciona el banco 1

EECON1,WREN ; Permiso de escritura activado

BCF

INTCON, GIE

; Desabilita interrupciones.

;Comienzo de la secuencia de escritura MOVLW MOVWF MOVLW MOVWF BSF 0x55 EECON2 0xAA EECON2 ; Se escribe AA h en EECON2 ; Se escribe el dato 55 h en EECON2

EECON1,WR

; Comienza la escritura ; Habilita las interrupciones.

BSF INTCON,GIE BCF BCF

EECON1,WREN ; Permiso de escritura desactivado STATUS,R0 ; Selecciona el banco 0

Verificacin de la escritura

Dependiendo de la aplicacin, la experiencia en programacin dice que los datos escritos en la EEPROM deben ser verificados comparndolos con el dato que se acaba de escribir. Esto debe usarse en aplicaciones en las que un bit de la EEPROM sufre ciclos de lectura/escritura hasta rozar el lmite de las especificaciones. Generalmente el fallo de escritura en un bit de la EEPROM ser un bit que se escribe como un 0 lgico pero devuelve un 1 debido a la prdida de ese bit. La siguiente porcin de cdigo es un ejemplo de verificacin del dato escrito: BCF STATUS,RP0 ; Nos situamos en el banco 0 ; Debemos estar en el banco 0 ; Cambiamos al banco 1 ; Leemos el dato que se guarda en ; EEDATA, y cambiamos a banco 0

MOVF EEDATA,W BSF BSF BCF STATUS,RP0 EECON1,RD STATUS,RP0

; A continuacin se comprueba que los datos en W en EEDATA son los mismos SUBWF EEDATA,W BTFSS STATUS,Z GOTO ERR_ESCRIT ..... Rutinas EEPROM ; Restamos ambos valores ; Si la operacin es cero, son iguales ; Si no son iguales, saltamos a ERR_ESCRIT ; Si son iguales, seguimos con el programa

A continuacin se presentan dos rutinas para escribir y leer en la EEPROM: ;************************************************************** ; EEPROM_W: ; Graba un byte en la EEPROM de datos. La direccin ser la contenida ; en EEADR y el dato se le supone previamente introducido en EEDATA ; EEPROM_W bsf bsf STATUS,RP0 ;Selecciona banco 1

EECON1,WREN ;Permiso de escritura ;Secuencia de escritura

movlw b'01010101' movwf EECON2 movlw b'10101010' movwf EECON2 bsf bcf ESPERA btfss goto bcf bcf return ; EECON1,EEIF ESPERA EECON1,EEIF STATUS,RP0 EECON1,WR

;Orden de escritura

EECON1,WREN ;Desconecta permiso de escritura

;Comprobar bandera de fin de escritura

;Reponer flag de fin de escritura ;Seleccin banco 0

;************************************************************** ; EEPROM_R: ; Lee un byte de la EEPROM. Se supone al registro EEADR cargado ; con la direccin a leer. En EEDATA aparecer el dato ledo.

; EEPROM_R bsf bsf bcf return ;************************************************************** STATUS,RP0 EECON1,RD STATUS,RP0 ;Seleccin de banco 1 ;Orden de lectura ;Seleccin de banco 0

Das könnte Ihnen auch gefallen