MEMORIA EEPROM El contenido de la EEPROM se puede cambiar durante el funcionamiento (similar a la RAM), pero se queda permanentemente guardado después

de la pérdida de la fuente de alimentación (similar a la ROM). Por lo tanto, la EEPROM se utiliza con frecuencia para almacenar los valores creados durante el funcionamiento, que tienen que estar permanentemente guardados. Por ejemplo, si usted ha diseñado una llave electrónica o una alarma, sería estupendo permitir al usuario crear e introducir una contraseña por su cuenta. Por supuesto, la nueva contraseña tiene que estar guardada al apagar la fuente de alimentación. En tal caso una solución perfecta es el microcontrolador con una EEPROM embebida. El PIC16F887 dispone de 256 localidades de memoria EEPROM controlados por los bits de los siguientes registros:  EECON1 (registro de control);  EECON2 (registro de control);  EEDAT (almacena los datos listos para escritura y lectura); y  EEADR (almacena la dirección de la EEPROM a la que se accede). Además, el registro EECON2 no es un registro verdadero, no existe físicamente en el chip. Se utiliza sólo durante la escritura de los datos en la memoria. Los registros EEDATH y EEADRH se utilizan durante la escritura y lectura de la EEPROM. Los dos se utilizan también durante la escritura y lectura de la memoria de programa (FLASH). Registro EECON1

EEPGD - Program/Data EEPROM Select bit (bit de selección de memorias)  1 - Acceso a la memoria Flash de programa.  0 - Acceso a la memoria de datos EEPROM. WRERR - EEPROM Error Flag bit (bit de error de escritura)  1 - Se produce un error de escritura de forma prematura y ha ocurrido un error.  0 - Se ha completado la operación de escritura. WREN - EEPROM Write Enable bit (bit de habilitación de escritura)  1 - Escritura de datos en la EEPROM habilitada.  0 - Escritura de datos en la EEPROM deshabilitada. WR - Write Control bit (bit de control de escritura)  1 - Se ha iniciado una operación de escritura de datos en la EEPROM.  0 - Se ha completado una operación de escritura de datos en la EEPROM. RD - Read Control bit (bit de control de lectura)  1 - Inicia una lectura de la memoria EEPROM.  0 - Lectura de la memoria EEPROM deshabilitada.

LECTURA DE LA MEMORIA EEPROM Para leer los datos de la memoria EEMPROM, siga los siguientes pasos:  Paso 1: Escribir la dirección (00h - FFh) en el registro EEADR.

Paso 4: El dato se almacena en el registro EEDAT y está listo para su uso. PORTC = 0x00. ii++) EEPROM_Write(0x80+ii. TRISC = 0. Durante el proceso de escritura las interrupciones deben estar deshabilitadas. Delay_ms(1000). // Leer los datos de la dirección 0x50 de la EEPROM y // Visualizarla en el puerto PORTC Delay_ms(1000). PORTB = 0x00. for(ii = 0. Delay_ms(1000). Sólo ha quedado seguir a una secuencia especial para iniciar la escritura para cada byte. PORTB = EEPROM_Read(0x02). ii < 32. PORTC = 0xFF. // 0x80 y visualizarla en el puerto PORTD Delay_ms(250). ii++) { // Leer el bloque de 32 bytes de la dirección PORTD = EEPROM_Read(0x80+ii). Delay_ms(1000).0xAA). TRISB = 0. char ii. PORTC = 0. for(ii = 0. ANSELH = 0.   Paso 2: Seleccionar el bloque de memoria EEPROM al poner a cero el bit EEPGD del registro EECON1. // La variable ii utilizada en el bucle void main(){ ANSEL = 0. PORTD = 0. // El ejemplo muestra cómo utilizar la librería EEPROM en el compilador mikroC PRO for PIC. // Leer los datos de la dirección 2 de la EEPROM y // Llenar el búfer con los datos // Escribir los datos en la dirección 0x80+ii // Escribir un dato en la dirección 2 de la EEMPROM // Escribir un dato en la dirección 0x5 de la EEMPROM // Diodos en los puertos PORTB y PORTC // para indicar el comienzo de la lectura // Configuración de los pines AN como E/S digitales // Visualizarla en el puerto PORTB PORTC = EEPROM_Read(0x50). ii < 32. } } . ii). EEPROM_Write(0x02. PORTB = 0. ESCRITURA EN LA MEMORIA EEPROM Antes de escribir los datos en la memoria EEPROM es necesario escribir la dirección en el registro EESADR y los datos en el registro EESAT. EEPROM_Write(0x50.0x55). TRISD = 0. Paso 3: Poner a uno el bit RD del mismo registro para leer el contenido de la localidad. PORTB = 0xFF.

por lo que debe ser llamado tantas veces como sea necesario para cumplir con el tamaño del bloque de datos que se va a escribir. Tamaño del bloque es MCU dependiente. Importante: Debido a las características específicas de memoria flash de las familias P16/P18. Para este grupo de MCU ls funciones de leer y escribir están implementan. Para este grupo de lectura MCU. Cada palabra se interpreta por la CPU como una instrucción a ser ejecutada durante el funcionamiento del microcontrolador. la librería flash es MCU dependiente. puede escribir menos bytes que los que borra. Para este grupo de MCU sólo leer la función está implementado. FLASH_Read Para PIC16: sub function FLASH_Read(dim Address as word) as word Regresa los datos desde una dirección especifica de la memoria flash. Además. Tenga en cuenta que los prototipos difieren para las familias PIC16 y PIC18.. FLASH_Write escribe 4 posiciones de memoria flash en una fila... experimentar y para la fabricación en pequeña escala. Tenga en cuenta que la operación de escritura que se ejecuta como borrado y escritura. dim byref Data as word[4]) Escribe los bloques de datos en la memoria Flash. el segmento de memoria que se borran puede ser mayor que el tamaño del bloque de datos que se escribirán (MCU dependiente). Esto se denomina el código ejecutable. Todas las instrucciones que el microcontrolador puede reconocer y ejecutar se les denominan colectivamente Conjunto de instrucciones. el bloque de memoria flash tiene que ser borrado antes de la escritura (la operación de escritura no se ejecuta como borrado y escritura). Librería de Memoria Flash Esta biblioteca proporciona rutinas para acceder a la memoria flash del microcontrolador. Operaciones de memoria Flash que son MCU dependientes:  La operación de lectura es compatible. los microcontroladores con memoria Flash son perfectos para estudiar. Como es más fácil trabajar con el sistema de numeración hexadecimal. escribir y borrar operaciones apoyadas.  Leer y escribir operaciones soportadas (escritura se ejecuta como borrado y escritura). escribir y borrar las funciones estan implementadas. Por lo tanto. FLASH_Write Para PIC16: sub procedure FLASH_Write(dim Address as word. tmp = FLASH_Read(0x0D00) .. main: . dim tmp as byte . el código ejecutable se representa con frecuencia como una serie de los números hexadecimales denominada código Hex. . P16: Esta función puede borrar un segmento de memoria antes de escribir bloques de datos en él (MCU dependiente). se recomienda escribir tantos bytes como se van a borrar.MEMORIA FLASH El microcontrolador ejecuta el programa cargado en la memoria Flash.. end. Consulte hoja de MCU datos antes de utilizar la biblioteca flash..  Leer. Ya que es posible escribir y borrar el contenido de esta memoria prácticamente un número ilimitado de veces. Adicionalmente.

La operación de escritura se borde alineado y no puede ocurrir a través de fronteras. program Flash_Write dim counter as byte addr.. Esa es la razón por la que los bits de la dirección de inicio menores de 4 [0:3] deben ser cero.. end. Desde que la rutina FLASH_Write escribe en trozos de 4 palabras.. Los datos se escriben a partir de la ubicación dada.. luego...dim toWrite as byte[64] . Por lo tanto. main: . tenemos que llamarlo 4 veces en una fila. dataAR[0][0]= 0x3FAA+0 dataAR[0][1]= 0x3FAA+1 . las mismas ubicaciones se leen y los datos se muestran en PORTB y PORTC. se recomienda realizar escrituras de flash en pedazos de 16 palabras. FLASH_Erase_64($0D00) EJEMPLO: Esta es una simple demostración de cómo utilizar la memoria flash interna del PIC16 para almacenar datos.. FLASH_Erase Para PIC16: sub procedure FLASH_Erase(dim address as word) Borra bloques de memoria a partir de una dirección dada.. data_ as word dataAR as word[4][4] main: ANSEL = 0 ' Configure AN pins as digital ' Disable comparators ' Initial PORTB value ' Set PORTB as output ' Initial PORTC value ' Set PORTC as output ANSELH = 0 C1ON_bit = 0 C2ON_bit = 0 PORTB = 0 TRISB = 0 PORTC = 0 TRISC = 0 Delay_ms(500) ‘Todos los bloques escritos en la memoria del programa se realizan como palabras de 16 borrado por las operaciones de escritura de ocho palabras. toWrite) . ' write contents of the array to the address 0x0D00: FLASH_Write_64(0x0D00. Por P16 Familly se aplica sólo para los de MCU cuya memoria flash no soporta operaciones de borrado y escritura (consulte la hoja de datos). ' initialize array: for i = 0 to 63 toWrite[i] = i next i .

sus funciones no tienen muchas cosas en común. además están fabricados de la misma forma y se comportan de la manera similar. valid for P16F887 ' write some data to Flash MEMORIA RAM Es la tercera y la más compleja parte de la memoria del microcontrolador. Todos estos registros se dividen en cuatro bancos de memoria.dataAR[0][2]= 0x3FAA+2 dataAR[0][3]= 0x3FAA+3 dataAR[1][0]= 0x3FAA+4 dataAR[1][1]= 0x3FAA+5 dataAR[1][2]= 0x3FAA+6 dataAR[1][3]= 0x3FAA+7 dataAR[2][0]= 0x3FAA+8 dataAR[2][1]= 0x3FAA+9 dataAR[2][2]= 0x3FAA+10 dataAR[2][3]= 0x3FAA+11 dataAR[3][0]= 0x3FAA+12 dataAR[3][1]= 0x3FAA+13 dataAR[3][2]= 0x3FAA+14 dataAR[3][3]= 0x3FAA+15 addr = 0x0430 for counter = 0 to 3 Delay_ms(100) FLASH_Write(addr+counter*4. Al apagar la fuente de alimentación. so ' starting Flash address. Aunque los dos grupos de registros se ponen a cero al apagar la fuente de alimentación. Con tal propósito. dataAR[counter]) next counter Delay_ms(500) addr = 0x0430 for counter = 0 to 15 data_ = FLASH_Read(addr) Inc(addr) Delay_us(10) PORTB = data_ PORTC = word(data_ >> 8) Delay_ms(500) next counter end. si el programa ejecuta la adición (de cualquier cosa) es necesario tener un registro que representa lo que se llama “suma” en vida cotidiana. se pierde el contenido de la memoria RAM. ' ' two MSB's will always be '00' and PORTC MS Byte ' display data on PORTB LS Byte ' P16's FLASH is 14-bit wide. En este caso consiste en dos partes: en registros de propósito general y en los registros de funciones especiales (SFR). Por ejemplo. uno de los registros de la RAM es denominado “suma” y se utiliza para almacenar los resultados de la adición. Se utiliza para almacenar temporalmente los datos y los resultados inmediatos creados y utilizados durante el funcionamiento del microcontrolador. .

Sign up to vote on this title
UsefulNot useful