我只是网65533地址写入一个u16的数据,掉电重启数据怎么没了呢
at24c是EEPROM,如果你不对它重新编程,数据不会丢失。
看看你对它的写入本身有没有问题。
不是写保护,写的时候直接就存储进去了,就跟你电脑里的磁盘一样,掉电丢失可能是你没有写进去
for(i = 218;i <223;i++) //想存储器中写入256个数据
{
IIC_write_data(i,i);
delay(50);
}
for(i=218;i<223;i++)
{
shuzi = IIC_read_data(i);
delay(50);
itoa(shuzi,table);
//LCD_write_english_string(x,y,table);
LCD_write_english_string(x,y,table);
if(shuzi>=0&&shuzi<=9)
x += 6 ;
else if(shuzi>=10&&shuzi<=99)
x += 12;
else
x += 18;
if(x >= 72)
{
x = 0;
y += 1;
}
}
sbit sda=P1^7;
sbit scl=P1^6;
uchar address; //指示24C02中的地址
void IIC_delay()
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void IIC_start() //开始信号
{
sda=1;
scl=1;
IIC_delay();
sda=0;
IIC_delay();
scl=0; //
}
void IIC_stop() //停止
{
sda=0;
scl=1;
IIC_delay();
sda=1;
scl=1;
IIC_delay();
//scl=0; //
}
void IIC_noack_iic()
{
sda=1;
scl=1;
IIC_delay();
scl=0;
//sda=0;
}
void IIC_ckeck_ck()
{
sda=1;
scl=1;
F0=0; //内部定义
if(sda==1)
F0=1;
scl=0;
}
void IIC_write_byte(uchar date)
{
uchar i;
for(i=0;i<8;i++)
{
if(date&0x80)
sda=1;
else
sda=0;
scl=1;
IIC_delay();
scl=0;
date=date<<1;
}
IIC_ckeck_ck();
if(F0==1)
while(1);
}
uchar IIC_read_byte()
{
uchar i,k;
k=0;
scl=0;
IIC_delay();
sda=1;
IIC_delay();
for(i=0;i<8;i++)
{
sda=1;
scl=1;
k=k<<1;
if(sda==1)
k|=0x01;
else
k&=0xfe;
scl=0;
}
IIC_noack_iic();
return k;
}
void IIC_write_data(uchar address,uchar date)
{
IIC_start();
IIC_write_byte(0xa0);
IIC_write_byte(address);
IIC_write_byte(date);
IIC_stop();
IIC_delay();
}
uchar IIC_read_data(uchar address)
{
uchar date;
IIC_start();
IIC_write_byte(0xa0);
IIC_write_byte(address);
IIC_start();
IIC_write_byte(0xa1);
date=IIC_read_byte();
//ack_iic();
IIC_noack_iic();//对从机产生非应答信号,使得从机释放SDA,从而使主机产生停止信号
IIC_stop();
return date;
}
电阻期间 不会丢失