P. 1
Memoria Eeprom, Ram y de Programa 16f88

Memoria Eeprom, Ram y de Programa 16f88

|Views: 28|Likes:
Publicado porαχλύς ψυχή

More info:

Published by: αχλύς ψυχή on Oct 15, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOCX, PDF, TXT or read online from Scribd
See more
See less

06/17/2014

pdf

text

original

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.

ii++) { // Leer el bloque de 32 bytes de la dirección PORTD = EEPROM_Read(0x80+ii). ii++) EEPROM_Write(0x80+ii. char ii. } } . ANSELH = 0. PORTB = EEPROM_Read(0x02). PORTC = 0x00. EEPROM_Write(0x50. Delay_ms(1000). Delay_ms(1000). PORTC = 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. Durante el proceso de escritura las interrupciones deben estar deshabilitadas. TRISC = 0. Paso 4: El dato se almacena en el registro EEDAT y está listo para su uso. TRISD = 0. EEPROM_Write(0x02.0xAA). Delay_ms(1000). PORTD = 0. // Leer los datos de la dirección 0x50 de la EEPROM y // Visualizarla en el puerto PORTC Delay_ms(1000). TRISB = 0. // El ejemplo muestra cómo utilizar la librería EEPROM en el compilador mikroC PRO for PIC. PORTB = 0xFF.0x55). ii < 32. PORTB = 0.   Paso 2: Seleccionar el bloque de memoria EEPROM al poner a cero el bit EEPGD del registro EECON1. Sólo ha quedado seguir a una secuencia especial para iniciar la escritura para cada byte. for(ii = 0. PORTB = 0x00. PORTC = 0xFF. ii). for(ii = 0. ii < 32. // La variable ii utilizada en el bucle void main(){ ANSEL = 0. // 0x80 y visualizarla en el puerto PORTD Delay_ms(250). Paso 3: Poner a uno el bit RD del mismo registro para leer el contenido de la localidad. // 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).

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

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 .dim toWrite as byte[64] . Esa es la razón por la que los bits de la dirección de inicio menores de 4 [0:3] deben ser cero. main: . toWrite) . FLASH_Erase_64($0D00) EJEMPLO: Esta es una simple demostración de cómo utilizar la memoria flash interna del PIC16 para almacenar datos. las mismas ubicaciones se leen y los datos se muestran en PORTB y PORTC. end. Desde que la rutina FLASH_Write escribe en trozos de 4 palabras. 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. se recomienda realizar escrituras de flash en pedazos de 16 palabras. La operación de escritura se borde alineado y no puede ocurrir a través de fronteras. luego. ' write contents of the array to the address 0x0D00: FLASH_Write_64(0x0D00.. FLASH_Erase Para PIC16: sub procedure FLASH_Erase(dim address as word) Borra bloques de memoria a partir de una dirección dada..... Los datos se escriben a partir de la ubicación dada. dataAR[0][0]= 0x3FAA+0 dataAR[0][1]= 0x3FAA+1 . Por lo tanto... program Flash_Write dim counter as byte addr. tenemos que llamarlo 4 veces en una fila..

uno de los registros de la RAM es denominado “suma” y se utiliza para almacenar los resultados de la adición. Por ejemplo. 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. Con tal propósito. ' ' two MSB's will always be '00' and PORTC MS Byte ' display data on PORTB LS Byte ' P16's FLASH is 14-bit wide. so ' starting Flash address. además están fabricados de la misma forma y se comportan de la manera similar. sus funciones no tienen muchas cosas en común.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. Todos estos registros se dividen en cuatro bancos de memoria. Aunque los dos grupos de registros se ponen a cero al apagar la fuente de alimentación. Al apagar la fuente de alimentación. Se utiliza para almacenar temporalmente los datos y los resultados inmediatos creados y utilizados durante el funcionamiento del microcontrolador. 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. . En este caso consiste en dos partes: en registros de propósito general y en los registros de funciones especiales (SFR). se pierde el contenido de la memoria RAM. valid for P16F887 ' write some data to Flash MEMORIA RAM Es la tercera y la más compleja parte de la memoria del microcontrolador.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->