You are on page 1of 3

Elaborado por V.L.

Pérez-García

PRÁCTICA

ESCRITURA EN UNA MEMORIA EEPROM 24LC256

OBJETIVO

Guardar los datos que se oprimen en un teclado matricial en las diez primeras posiciones de
una memoria EEPROM 24LC256 y representar los valores escritos en un Display LCD.

EQUIPO Y RECURSOS REQUERIDOS

 Computadora.
 Compilador C CCS.
 Simulador para circuitos electrónicos PROTEUS

PROCEDIMIENTO

1. Alambrar en PROTEUS el circuito eléctrico de la Figura 1.


2. Compilar en C CCS el siguiente código de programa.

#include <16f877a.h> //Usando el microcontrolador PIC16F877A


#fuses XT,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT,NOCPD,NOWRT,NODEBUG
#use delay(clock=4000000)
#use i2c(Master, SDA=PIN_C4 , SCL=PIN_C3, SLOW) //Configuarción I2C
#define use_portd_lcd true //configaración del puerto D para la pantalla LCD
#include <lcd.c> //Cargar el archivo para el control de la pantalla LCD
#define use_portb_kbd true //Configuración del puerto B para lectura con el teclado
#include <kbd.c> //Cargar el archivo para el control del teclado
#include <string.h>

#define EEPROM_ADDRESS long int


char tecla; //Valor de la tecla pulsada
int8 dato=0; //Dato a enviar o leer de memoria
int16 address=0x02; //Dirección de memoria

/******************************************************************************/
/*********************** FUNCIÓN ESCRITURA EN EEPROM *************************/

void escribir_en_eeprom(long int address, BYTE dato)


{
short int status;

i2c_start(); //Inicio de la transmisión...


i2c_write(0xA0); //... con la dirección I2C correspondiente a la eeprom en modo escritura
i2c_write(address>>8); //Envío parte alta dirección
i2c_write(address); //Envío parte baja direción
i2c_write(dato); //Envío del dato
i2c_stop(); //Finalización de la transmisión

i2c_start(); //Reinicio de la comunicación...


status=i2c_write(0xA0); //... para lectura de bit ACK (escritura incorrecta)
Elaborado por V.L. Pérez-García

while(status==1) //Si es 1 esperar a que responda eeprom


{
i2c_start();
status=i2c_write(0xa0);
}
}

void main ()
{

//int x;
lcd_init(); //Inicializa la pantalla LCD
kbd_init(); //Inicializa el teclado matricial
port_b_pullups(TRUE); // Activación de las resistencias PullUps del PIC

lcd_gotoxy(1,1);
printf(lcd_putc, "OPRIME TECLA");
lcd_gotoxy(1,2);

while (true)
{

tecla=kbd_getc(); //Guarda el valor de la tecla pulsada en la variable "tecla"


dato=tecla-48; // Valor ASCII se pasa a su valor numérico
if(tecla!=0)
{
if(tecla=='*')
{
lcd_putc('\f');
lcd_gotoxy(1,1);
printf(lcd_putc, "OPRIME TECLA");
lcd_gotoxy(1,2);
}
else

{
printf(lcd_putc,"%c",tecla);//Imprime caracter
delay_ms(250);

escribir_en_eeprom(address, dato); //Escribir el dato en la EEPROM


}
}
}
}

3. Cargar el archivo .COF al microcontrolador PIC16F877A en el circuito electrónico


de la Figura 1.
4. Para simular y observar la ubicación donde se guarda el dato >> dar click en play >>
oprime una tecla en el teclado >> dar click en step >> en la barra de menú seleccionar
Debug y dar click en I2C Memory Internal Memory-U?.
Elaborado por V.L. Pérez-García

5. Para comprender como funciona el circuito electrónico, vuelve a repetir el paso


anterior las veces que sea necesario.
6. Modifica el código de programa para guardar datos en las diez primeras posiciones
de una memoria EEPROM 24LC256.

Nota: Si oprimes la tecla “*” se limpia el segundo renglón de la pantalla LCD.

PREGUNTAS

1. ¿Cómo funciona el circuito electrónico con el primer código de programa?

2. ¿Cuál es la dirección de la posición donde se guardó el dato que se oprimió en el


teclado antes de modificar el código de programa?

ESCRIBA SUS CONCLUSIONES

You might also like