Tema14_La memoria EEPROM_rev021210

Anuncio
La memoria EEPROM
(c) Domingo Llorente 2010
1
Características
Los pics de la familia 16F87x disponen de una zona de memoria
especial (EEPROM), donde podemos guardar nuestros datos sin
temor a perderlos cuando dejamos de alimentar el dispositivo.
La memoria EEPROM no está mapeada en el mapa de memoria y se
accede a ella a través de unos registros especiales.
También es posible acceder a la memoria flash de programa en
tiempo de ejecución del programa.
Cantidad de EEPROM implementada según el modelo de pic:
(c) Domingo Llorente 2010
2
Registros asociados (I)
Son un total de 8 registros los que intervienen, en mayor o menor
medida en el control de la lectura/escritura de la memoria EEPROM.
(c) Domingo Llorente 2010
3
El registro EECON1
(c) Domingo Llorente 2010
4
Leer datos de la EEPROM
Procedimiento de lectura:
1º.- Escribir en el registro EEADR la “dirección” de la memoria que
queremos leer.
2º.- Poner a cero el bit EEPGD del registro EECON1.
3º.- Poner a uno el bit RD del registro EECON1.
4º.- Leer el dato del registro EEDATA.
(c) Domingo Llorente 2010
5
Escribir datos en la EEPROM
1º.- Escribir la dirección donde queremos escribir en el registro EEADR.
2º.- Escribir el dato en el registro EEDATA.
3º.- Poner a cero el bit EEPGD del registro EECON1.
4º.- Poner a uno el bit WREN del registro EECON1.
5º.- Deshabilitar las interrupciones (si están habilitadas).
6º.- Ejecutar la siguiente secuencia de instrucciones:
• Escribir el dato 55h en el registro EECON2 en dos pasos,
primero cargarlo en el acumulador y luego en el registro EECON2.
• Escribir el dato AAh en el registro EECON2 en dos pasos,
primero cargarlo en el acumulador y luego en el registro EECON2.
• Poner a uno el bit WR del registro EECON1 para iniciar la escritura.
7º.- Habilitar las interrupciones (si se deshabilitaron).
8º.- Poner a cero el bit WREN del registro EECON1.
Al término del ciclo de escritura (varios milisegundos) el bit WR se pone
a cero y la bandera EEIF se pone a uno.
(c) Domingo Llorente 2010
6
Lectura/Escritura EEPROM en CCS
El compilador CCS se encarga de realizar los procedimientos de
lectura / escritura de la EEPROM a través de dos funciones:
Para leer de la EEPROM:
valor=read_eeprom (dirección); // valor debe ser del tipo int8
Para escribir un dato en la EEPROM:
write_eeprom (dirección,dato);
Ej:
write_eeprom(0x00,0x01); // Guarda el dato 1 en la pos. 0x00
Nota: Poner especial atención para no leer/escribir de/en una
posición de memoria NO implementada.
Para 16F877A, el rango es: 00-FF (256 posiciones)
(c) Domingo Llorente 2010
7
Ejercicio de aplicación
Diseñar un programa que incremente el valor decimal (0-9) del
display de siete segmentos de la placa de periféricos con cada flanco
descendente en RC0. Guardar el estado del display de forma que si
se apaga el entrenador al volverlo a conectar mantenga el valor con
el que se apagó.
(c) Domingo Llorente 2010
8
Solución
propuesta
(c) Domingo Llorente 2010
9
Descargar