Memoria Eeprom de Datos

Embed Size (px)

DESCRIPTION

electronica, memorias

Citation preview

  • 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 ; Direccin a leer. bsf STATUS,RP0 ; Banco 1. bsf EECON1,RD ; Orden de lectura. EEPROM_SigueLeyendo btfsc EECON1,RD ; El PIC indica que ha terminado la lectura goto EEPROM_SigueLeyendo ; poniendo en bajo este bit. bcf STATUS,RP0 ; Banco 0. movf EEDATA,W ; El byte ledo al registro W. return ; 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 ; Asegura que trabaja con el Banco 0. movwf EEDATA ; El byte a escribir. movf INTCON,W ; Reserva el valor anterior de INTCON movwf EEPROM_GuardaINTCON bsf STATUS,RP0 ; Acceso al Banco 1. bcf INTCON,GIE ; Deshabilita todas las interrupciones. bsf EECON1,WREN ; Habilita escritura. ; ; El fabricante especifica que hay que seguir esta secuencia para escritura en EEPROM: ; movlw 0x55 movwf EECON2 movlw 0xAA movwf EECON2 bsf EECON1,WR ; Inicia la escritura. EEPROM_TerminaEscribir btfsc EECON1,WR ; Comprueba que termina de escribir en la EEPROM. goto EEPROM_TerminaEscribir bcf EECON1,WREN ; Desautoriza la escritura en EEPROM. bcf EECON1,EEIF ; Limpia este flag. bcf STATUS,RP0 ; Acceso al Banco 0. movf EEPROM_GuardaINTCON,W ; Restaura el valor anterior de INTCON. movwf INTCON return 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. Se carga en el registro EEDATA el dato a grabar. 2. Se carga en EEADR la direccin de la posicin a escribir. 3. Microchip recomienda deshabilitar las interrupciones durante la secuencia de escritura. 4. Se ejecuta la siguiente secuencia para iniciar la escritura de cada byte:

    movlw 0x55

    movwf EECON2 movlw 0xAA movwf EECON2 bsf EECON1,WR ; Inicia la escritura.

    5. 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.

    6. 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 ; Corresponde a la direccin 0 de la zona EEPROM ; de datos. DE 0x00 ; 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 CBLOCK 0x0C Contador ENDC ORG 0x2100 ; Corresponde a la direccin 0 de la zona EEPROM ; de datos. DE 0x00 ; El contador en principio a cero. ; ZONA DE CDIGOS ******************************************************************** ORG 0 ; El programa comienza en la direccin 0. Inicio call LCD_Inicializa clrw ; Leer la primera posicin de memoria EEPROM. call EEPROM_LeeDato movwf Contador ; Se guarda en Contador. call BIN_a_BCD ; Se visualiza en BCD call LCD_Byte ; con nibble alto apagado si es cero. movlw MensajeReseteado call LCD_Mensaje incf Contador,F ; Se incrementa. movf Contador,W ; Ahora se graba en la EEPROM de datos. call EEPROM_EscribeDato Principal sleep ; Pasa a modo de reposo.

  • goto Principal ; "Mensajes" ---------------------------------------------------------------------------- ; Mensajes addwf PCL,F MensajeReseteado DT " reseteados. ", 0x00 FinMensajes INCLUDE ; Subrutinas bsicas de control de la EEPROM de INCLUDE ; datos del PIC. INCLUDE INCLUDE INCLUDE END

    /ColorImageDict > /JPEG2000ColorACSImageDict > /JPEG2000ColorImageDict > /AntiAliasGrayImages false /DownsampleGrayImages true /GrayImageDownsampleType /Bicubic /GrayImageResolution 300 /GrayImageDepth -1 /GrayImageDownsampleThreshold 1.50000 /EncodeGrayImages true /GrayImageFilter /DCTEncode /AutoFilterGrayImages true /GrayImageAutoFilterStrategy /JPEG /GrayACSImageDict > /GrayImageDict > /JPEG2000GrayACSImageDict > /JPEG2000GrayImageDict > /AntiAliasMonoImages false /DownsampleMonoImages true /MonoImageDownsampleType /Bicubic /MonoImageResolution 1200 /MonoImageDepth -1 /MonoImageDownsampleThreshold 1.50000 /EncodeMonoImages true /MonoImageFilter /CCITTFaxEncode /MonoImageDict > /AllowPSXObjects false /PDFX1aCheck false /PDFX3Check false /PDFXCompliantPDFOnly false /PDFXNoTrimBoxError true /PDFXTrimBoxToMediaBoxOffset [ 0.00000 0.00000 0.00000 0.00000 ] /PDFXSetBleedBoxToMediaBox true /PDFXBleedBoxToTrimBoxOffset [ 0.00000 0.00000 0.00000 0.00000 ] /PDFXOutputIntentProfile () /PDFXOutputCondition () /PDFXRegistryName (http://www.color.org) /PDFXTrapped /Unknown

    /Description >>> setdistillerparams> setpagedevice