HOME

PRODUCTOS

PROYECTOS

TUTORIALES

VIDEOS

FREEWARE

PROGRAMAS

FUNCIONES C

EMPRESA

ENGLISH

                   

 Lectura y escritura de datos en la memoria EEPROM en el 16F84/F628/F88

 

 

EEPROM2.jpg (62336 bytes)

 

Introducción:

La memoria EEPROM permite la lectura-escritura de datos teniendo como característica principal que, a diferencia de la memoria RAM, no es volátil, es decir, si la alimentación externa del circuito se interrumpe, los datos contenidos en las localidades de la EEPROM no se pierden. Además, éstos datos son electrónicamente modificables a través de programa, como se muestra en las subrutinas listadas más abajo.

El microcontrolador 16F84 cuenta con 64 localidades (direcciones 00H..3FH), el 16F628 con 128 bytes (direcciones 00H..7FH) y el 16F88 con 256 bytes (direcciones 00H..FFH) de memoria EEPROM. El número total de ciclos de lectura y escritura que puede llevarse a cabo en cada localidad en EEPROM es de aproximadamente 10 millones.

 

La memoria EEPROM es útil para almacenar datos que, por su importancia, se quieren conservar almacenados en forma segura, a pesar de cortes de energía o ruido inducido en los circuitos del microcontrolador, que en un momento dado podrían destruir estos datos en caso de encontrarse almacenados en memoria RAM.

Adicionalmente, para cancelar la posibilidad de escrituras accidentales en la EEPROM, que pudiesen ocurrir en caso de que el procesador pierda el control sobre la ejecución del programa, existe una secuencia de seguridad para el ciclo de escritura, mediante el registro EECON2.

Como ejemplos de aplicaciones en donde se utilice la EEPROM se pueden mencionar los siguientes: en una chapa electrónica, la clave de control de acceso generalmente se almacena en EEPROM. Asimismo, en un temporizador programable, las horas de encendido y apagado del temporizador también se almacena en EEPROM. El kilometraje en el odómetro de un automóvil se almacena en memoria EEPROM, lo cual garantiza su permanencia. 

Para accesar la memoria, es necesario utilizar 4 registros especiales que son: EEADR, EEDAT, EECON1 y EECON2. El acceso a la EEPROM en el 16F84/F628/F88 es a través de direccionamiento indirecto. EEDAT guarda el dato que habrá de escribirse en la EEPROM, mientras que EEADR es un apuntador hacia la localidad deseada. EECON1 y EECON2 son los registros de control que permiten leer y escribir y garantizar la integridad de los datos almacenados.

Las subrutinas para manejar la EEPROM en los microcontroladores 16F84/F628/F88 son muy parecidas. La única diferencia el la ubicación de las localidades en los bancos de registros: en el 16F84, los registros EEDAT y EEADR se encuentran en el banco 0 y EECON1 y EECON2 en el banco 1. En el 16F628, todos estos registros se encuentran en el banco 1; en el 16F88, EEDAT Y EEADR en el banco 2, EECON1 y EECON2 en el banco 3

EJEMPLO DE RUTINAS PARA EL MICROCONTROLADOR 16F628

PARA ESCRIBIR EN LA EEPROM:

;para usar esta subrutina, debe almacenarse primeramente la dirección
;en el registro EEADR (BANCO1) y el dato en el registro EEDATA (BANCO1)
;la rutina regresa una vez que el dato fue escrito en la localidad deseada.

EEWR:     BANCO1                                            ;HABILITA EL BANCO 1
                BSF              EECON1,WREN          ;HABILITA ESCRITURA EN EEPROM
                BCF             INTCON, GIE              ; DESHABILITA INTERRUPCIONES
                MOVLW     H'55'                              ;PREPARA SECUENCIA DE SEGURIDAD
                MOVWF     EECON2                       ;ESCRIBE PRIMER DATO DE SECUENCIA
                MOVLW     H'AA'                             ;SEGUNDO DATO
                MOVWF     EECON2                       ;ESCRIBE SEGUNDO DATO DE SECUENCIA
                BSF             EECON1,WR                ;INICIA CICLO DE ESCRITURA
EW:         BTFSC        EECON1,WR                ;MALLA PARA ESPERAR AL FINAL DEL CICLO
                GOTO         EW                                 ;SI WR=1, CICLO DE ESCRITURA AUN NO TERMINA
                BCF            EECON1, WREN          ;DESHABILITA ESCRITURA
                BSF             INTCON, GIE                ;HABILITA INTERRUPCIONES
                RETURN

PARA LEER DE LA EEPROM:

;para usar esta subrutina, debe almacenarse antes la dirección deseada
;en el registro EEADR (BANCO1). La rutina regresa con el dato en w.
EERD:    BANCO1            
                BSF           EECON1,RD                  ;HABILITA EL BIT 0 (RD) DEL REGISTRO EECON1       
                MOVF       EEDATA,W                    ;TRANSFIERE EL DATO EN EEDATA A W
                RETURN

para el 16F88, consulte el siguiente documento: SUBRUTINAS PARA EEPROM 16F88.PDF

 

PROGRAMAS DE PRUEBA Y SIMULACION EN MPLAB IDE

Este programa, en versiones para 16F628/F88, escribe en la memoria EEPROM 32 datos en las direcciones 00H-1FH. Luego los lee uno a uno y los transfiere a los leds del puerto B durante medio segundo, de tal manera que puedan ser observados por el usuario. Si usted desarrolla su propio programa, use el archivo .txt para copiar/pegar en su programa las rutinas de lectura y escritura.

Puede también cargar directamente el programa ejecutable .hex para observarlo en su sistema EDUPIC ó EVOLUPIC 16F628/F88.

En la ventana de abajo se muestra la simulación del programa mencionado en MPLAB IDE. Los datos marcados en color rojo, son las localidades de la EEPROM.

EEPROM.jpg (104615 bytes)