The secuence to read of the I2C communication is:
START->ADDRESS W->CONTROL BYTE->REPEATED START->ADDRESS R->DATA BYTE
And knowing this i made the program:
//////////////////////////////////////////////////////
// CABECERA /////////////////////////////
//////////////////////////////////////////////////////
#include<18f4550.h>
#fuses INTHS,MCLR
#use delay(internal=8mhz)
#use i2c(Master,sda=PIN_B0,scl=PIN_B1)
#use rs232(baud=9600,parity=N,xmit=pin_c6,rcv=pin_c7,bits=8)
#include <LCD_flexible.c>
//////////////////////////////////////////////////////
// VARIABLES GLOBALES ////////
//////////////////////////////////////////////////////
char nombre[20];
char enter;
int direccion=0b00000000;
int a,escribir;
int incremento;
//////////////////////////////////////////////////////
// FUNCIONES ///////////////////////////
//////////////////////////////////////////////////////
#INT_RDA
void rda_int()
{
enter = getchar();
putc(enter);
if(enter==13 || a==20)
{
escribir=1;nombre[a]=0;
}
else
{
nombre[a]=enter;
a++;
}
}
//////////////////////////////////////////////////////
// PROGRAMA PRINCIPAL //////
//////////////////////////////////////////////////////
void main()
{
a=0;
lcd_init();
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
escribir=0;
puts( "Escribe tu nombre" );
while(escribir==0)
{}
puts("Pulsa enter para grabar en la memoria");
enter = getchar();
if(enter!=13)
{
escribir=0;
}
else
for (incremento=0;incremento<15;incremento++)
{
if (nombre[incremento]==0)
break;
i2c_start();
i2c_write(0b10100000);
i2c_write(0b00000000);
i2c_write(direccion);
i2c_write(nombre[incremento]);
i2c_stop();
direccion ++;
lcd_gotoxy(1,1);
printf(lcd_putc," MEMORIA ");
lcd_gotoxy(2,2);
printf(lcd_putc,"%s",nombre);
delay_ms(2);
}
}
//////////////////////////////////////////////////////
And this is the scheme in Proteus:
No hay comentarios:
Publicar un comentario