【紧急】24c08往0x101写数据把0x01的数据覆盖了?

[复制链接]
1539|10
 楼主| 橘子阿小 发表于 2022-1-7 11:00 | 显示全部楼层 |阅读模式
本帖最后由 橘子阿小 于 2022-1-7 11:01 编辑

void WR_EEPROM(unsigned char addr,unsigned char dat)
{
    uint S_addr;
I2C_Start();
if(addr<=256)S_addr=0xa0;
if(256<addr<=512)S_addr=0xa2;
if(512<addr<=768)S_addr=0xa4;
if(768<addr<=1024)S_addr=0xa6;
I2C_SendByte(S_addr, 1);//发送写器件地址
I2C_SendByte(addr, 1);//发送要写入内存地址
I2C_SendByte(dat, 0); //发送数据
I2C_Stop();
delay1ms(500);
}

unsigned char RD_EEPROM(unsigned char addr)
{
unsigned char num;
uint S_addr,s_addr;
if(addr<=256)S_addr=0xa0;s_addr=0xa1;
if(256<addr<=512)S_addr=0xa2;s_addr=0xa3;
if(512<addr<=768)S_addr=0xa4;s_addr=0xa5;
if(768<addr<=1024)S_addr=0xa6;s_addr=0xa7;
I2C_Start();
I2C_SendByte(S_addr, 1); //发送写器件地址
I2C_SendByte(addr, 1); //发送要读取的地址
I2C_Start();
I2C_SendByte(s_addr, 1); //发送读器件地址
num=I2C_ReadByte(); //读取数据
I2C_Stop();
return num;
}
int main(void)
{

    init();
        while(1)
        {
        WR_EEPROM(0x01,20);
        WR_EEPROM(0x02,30);
       WR_EEPROM(0x101,40);
        SJDL011=RD_EEPROM(0x01);
        SJDL022=RD_EEPROM(0x02);
        SJDL033=RD_EEPROM(0x101);
   
        ClrWdt();
    }
读到的结果是40 30 40,也就是写0x101地址的时候把0x01覆盖了,该怎么解决?
 楼主| 橘子阿小 发表于 2022-1-7 13:59 | 显示全部楼层
问题已解决,结贴
内政奇才 发表于 2022-1-13 15:00 来自手机 | 显示全部楼层
楼主厉害
hu9jj 发表于 2022-1-13 20:12 | 显示全部楼层
24C08的容量没那么大,高八位地址被忽略了,写入了0x01的地址中。
huquanz711 发表于 2022-1-13 21:19 来自手机 | 显示全部楼层
楼上回答正确
tpgf 发表于 2022-2-2 18:28 | 显示全部楼层
是的 只能识别低位的
晓伍 发表于 2022-2-2 18:48 | 显示全部楼层
能识别多少位的啊
八层楼 发表于 2022-2-2 18:54 | 显示全部楼层
只能识别低八位吗
观海 发表于 2022-2-2 19:25 | 显示全部楼层
有一起识别16位的吗
guanjiaer 发表于 2022-2-2 19:31 | 显示全部楼层
楼主是如何解决问题的呢
heimaojingzhang 发表于 2022-2-2 19:37 | 显示全部楼层
那如何识别高八位呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

65

主题

152

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部