Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MÓDULO 7:
Memoria EEPROM
2
Memoria
EEPROM
3
Introducción
4
Registros (I)
5
Registros (II)
6
Escritura en la eeprom
7
Escritura en la eeprom: Ejemplo
eeprom-write-byte.c
Función para escribir un
#include <pic16f876a.h> dato en la eeprom en la
void eeprom_write(unsigned char dir, unsigned char dato) dirección indicada
{
EEADR=dir; Establecer dirección
EEDATA=dato; Establecer dato
EEPGD=0; Selecionar la memoria EEPROM
WREN=1; Habilitar la escritura
EECON2=0x55;
Escribir los valores en EECON2
EECON2=0xAA;
WR=1; Comenzar la escritura
while (EEIF==0); Esperar a que la escritura
EEIF=0; termine
} Limpiar flag de la eeprom
void main(void)
{ Configurar led
TRISB1=0;
eeprom_write(0, 0x55); Escribir el valor 0x55 en la
RB1=1; dirección 0 de la EEPROM
9
Lectura de la eeprom: Ejemplo
eeprom-read-byte.c
#include <pic16f876a.h>
unsigned char eeprom_read(unsigned char dir)
{ Función para leer un dato de la
Establecer dirección dirección de la EEPROM indicada
EEADR=dir;
EEPGD=0; Establecer dato
RD=1; Selecionar la memoria
return EEDATA; EEPROM
void main(void)
Configurar puerto B para
{ salida
TRISB=0; Leer el dato que está en la dirección
0 de la EEPROM y sacarlo por los leds
PORTB=eeprom_read(0x00);
while(1);
}
10
Ejemplo: Escribir una tira de bytes
eeprom-write.c
#include <pic16f876a.h> Tabla con los bytes a escribir en la
unsigned char tabla[]={'H','O','L','A','!'}; eeprom
unsigned char size = Tamaño de la tabla
sizeof(tabla)/sizeof(unsigned char);
void main(void)
{
Recorrer la tabla escribiendo los
unsigned int i; bytes en la eeprom, comenzando por
la dirección 0
TRISB1=0; Usamos la función empleada en el
for (i=0; i<size; i++) { ejemplo de escritura
eeprom_write(i, tabla[i]);
Rellenar el resto de la memoria con
}
el carácter .
for (i=size; i<255; i++) {
eeprom_write(i,'.');
Encender el led para indicar que la
} operación ha terminado
RB1=1;
while(1);
}
11
Ejemplo: Volcado de la eeprom
sci_conf();
TRISB=0; Recorrer toda la eeprom
for (i=0; i<255; i++) {
Leer la posición i
valor=eeprom_read(i);
PORTB=valor; Sacarla por los leds
sci_write(valor);
Enviarla por el puerto serie
}
while(1);
}
12
Interrupciones
13
eeprom-write-int.c (parte I) Interrupciones: Ejemplo
#include <pic16f876a.h>
unsigned char tabla[]={'P','O','D','E','M','O',
'S','!','!'};
unsigned char size = Tabla con los bytes a escribir en la
EEPROM
sizeof(tabla)/sizeof(unsigned char);
Tamaño de la tabla
unsigned char i=0;
void isr() interrupt 0
{
EEIF=0; Limpiar flag de interrucion
return;
}
EEADR=i; Establecer direccion
EEDATA=tabla[i]; Establecer el dato a
grabar en la eeprom
EEPGD=0; Realizar la grabacion. Cuando
WREN=1; finalice se volverá a llamar a la
rutina de atención a la
EECON2=0x55; interrupción
EECON2=0xAA;
WR=1;
14
}
eeprom-write-int.c (parte II) Interrupciones: Ejemplo (II)
void main(void)
{
Configurar led para salida
TRISB1=0;
EEIF=0; Limpiar flag de la eeprom
15
Ejercicio:
16