打印

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

[复制链接]
965|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的地址中。

使用特权

评论回复
5
huquanz711| | 2022-1-13 21:19 | 只看该作者
楼上回答正确

使用特权

评论回复
6
tpgf| | 2022-2-2 18:28 | 只看该作者
是的 只能识别低位的

使用特权

评论回复
7
晓伍| | 2022-2-2 18:48 | 只看该作者
能识别多少位的啊

使用特权

评论回复
8
八层楼| | 2022-2-2 18:54 | 只看该作者
只能识别低八位吗

使用特权

评论回复
9
观海| | 2022-2-2 19:25 | 只看该作者
有一起识别16位的吗

使用特权

评论回复
10
guanjiaer| | 2022-2-2 19:31 | 只看该作者
楼主是如何解决问题的呢

使用特权

评论回复
11
heimaojingzhang| | 2022-2-2 19:37 | 只看该作者
那如何识别高八位呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

65

主题

152

帖子

1

粉丝