سلام به دوستان
یک ic حافظه خارجی وصل کردم وقتی روی حافظه منویسم و در خط بعدی آنرا می خوانم مشکلی نیست
اما وقتی همان مقادیر را پشت سر هم می خوانم آخرین مقدار نوشته شده را بر میگرداند
لطفا راهنمایی کنید عیب از کجاست
ممنون
write_eeprom(unsigned int address,unsigned char data )
{
unsigned char send;
i2c_start();
i2c_write(write_address_bus);
i2c_write((address & 0xff00)>>8);
i2c_write(address & 0x00ff);
i2c_write(data);
i2c_stop();
delay_ms(20);
}
unsigned char read_eeprom(unsigned int address) // write_eeprom(unsigned char data, unsigned int address)
{
unsigned char data_read;
i2c_start();
i2c_write(160);
i2c_write((address & 0xff00)>>8);
i2c_write(address & 0x00ff);
i2c_start();
i2c_write(161);
data_read=i2c_read(0);
i2c_stop();
E2PROM_Cont=0,delay_us(100);
return data_read;
}
while (1)
{
char b;
lcd_clear();
lcd_gotoxy(0,1);
b=read_eeprom(2000);sprintf(aaa,"%d",b); lcd_puts(aaa);delay_ms(1000);
b=read_eeprom(2001);sprintf(aaa,"%d",b); lcd_puts(aaa);delay_ms(1000);
b=read_eeprom(2002);sprintf(aaa,"%d",b); lcd_puts(aaa);delay_ms(1000);
b=read_eeprom(2003);sprintf(aaa,"%d",b); lcd_puts(aaa);delay_ms(1000);
lcd_gotoxy(0,0);
write_eeprom(2000,11);
b=read_eeprom(2000);sprintf(aaa,"%d",b); lcd_puts(aaa);delay_ms(1000);
write_eeprom(2001,12);
b=read_eeprom(2001);sprintf(aaa,"%d",b); lcd_puts(aaa);delay_ms(1000);
write_eeprom(2002,13);
b=read_eeprom(2002);sprintf(aaa,"%d",b); lcd_puts(aaa);delay_ms(1000);
write_eeprom(2003,14);
b=read_eeprom(2003);sprintf(aaa,"%d",b); lcd_puts(aaa);delay_ms(1000);
}
یک ic حافظه خارجی وصل کردم وقتی روی حافظه منویسم و در خط بعدی آنرا می خوانم مشکلی نیست
اما وقتی همان مقادیر را پشت سر هم می خوانم آخرین مقدار نوشته شده را بر میگرداند
لطفا راهنمایی کنید عیب از کجاست
ممنون
write_eeprom(unsigned int address,unsigned char data )
{
unsigned char send;
i2c_start();
i2c_write(write_address_bus);
i2c_write((address & 0xff00)>>8);
i2c_write(address & 0x00ff);
i2c_write(data);
i2c_stop();
delay_ms(20);
}
unsigned char read_eeprom(unsigned int address) // write_eeprom(unsigned char data, unsigned int address)
{
unsigned char data_read;
i2c_start();
i2c_write(160);
i2c_write((address & 0xff00)>>8);
i2c_write(address & 0x00ff);
i2c_start();
i2c_write(161);
data_read=i2c_read(0);
i2c_stop();
E2PROM_Cont=0,delay_us(100);
return data_read;
}
while (1)
{
char b;
lcd_clear();
lcd_gotoxy(0,1);
b=read_eeprom(2000);sprintf(aaa,"%d",b); lcd_puts(aaa);delay_ms(1000);
b=read_eeprom(2001);sprintf(aaa,"%d",b); lcd_puts(aaa);delay_ms(1000);
b=read_eeprom(2002);sprintf(aaa,"%d",b); lcd_puts(aaa);delay_ms(1000);
b=read_eeprom(2003);sprintf(aaa,"%d",b); lcd_puts(aaa);delay_ms(1000);
lcd_gotoxy(0,0);
write_eeprom(2000,11);
b=read_eeprom(2000);sprintf(aaa,"%d",b); lcd_puts(aaa);delay_ms(1000);
write_eeprom(2001,12);
b=read_eeprom(2001);sprintf(aaa,"%d",b); lcd_puts(aaa);delay_ms(1000);
write_eeprom(2002,13);
b=read_eeprom(2002);sprintf(aaa,"%d",b); lcd_puts(aaa);delay_ms(1000);
write_eeprom(2003,14);
b=read_eeprom(2003);sprintf(aaa,"%d",b); lcd_puts(aaa);delay_ms(1000);
}