24c16写地址超过256,又开始从0地址写数据了!求解决办法

2019-07-20 17:46发布

使用原子哥的IIC驱动写24c16,0-255地址数据读写都是正常的,但是当写到第256个地址的时候数据又从地址0开始写了!各位有没有遇到过这个问题!写的代码
[mw_shl_code=c,true]void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{       
        u8 eepaddr;
    IIC_Start();  
        if(EE_TYPE>AT24C16)
        {
                IIC_Send_Byte(0XA0);            //发送写命令
                IIC_Wait_Ack();
                eepaddr = (u8)WriteAddr>>8;
                IIC_Send_Byte(eepaddr);//发送高地址          
        }else IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));   //发送器件地址0XA0,写数据          
        IIC_Wait_Ack();          
        eepaddr = (u8)WriteAddr&0x00ff;
    IIC_Send_Byte(eepaddr);   //发送低地址
        IIC_Wait_Ack();                                                                                                              
        IIC_Send_Byte(DataToWrite);     //发送字节                                                          
        IIC_Wait_Ack();                                
    IIC_Stop();//产生一个停止条件
        delay_ms(10);         
}[/mw_shl_code]




读的代码

[mw_shl_code=c,true]u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{                                  
        u8 temp=0;                                                                                                                                                               
    IIC_Start();  
        if(EE_TYPE>AT24C16)
        {
                IIC_Send_Byte(0XA0);           //发送写命令
                IIC_Wait_Ack();
                IIC_Send_Byte(ReadAddr>>8);//发送高地址            
        }else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));   //发送器件地址0XA0,写数据           
        IIC_Wait_Ack();
    IIC_Send_Byte(ReadAddr%256);   //发送低地址
        IIC_Wait_Ack();            
        IIC_Start();                     
        IIC_Send_Byte(0XA1);           //进入接收模式                          
        IIC_Wait_Ack();         
    temp=IIC_Read_Byte(0);                  
    IIC_Stop();//产生一个停止条件            
        return temp;
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
shaozp
1楼-- · 2019-07-21 13:31
正点原子 发表于 2016-11-6 19:35
直接用我们例程,就可以支持24c16才对,只需要改一个宏定义

使用的就是原子哥您列成 我用的芯片 是FMC24Cl16。
正点原子
2楼-- · 2019-07-21 13:44
shaozp 发表于 2016-11-8 12:18
使用的就是原子哥您列成 我用的芯片 是FMC24Cl16。

那就奇怪了
换AT24C16试试
cvi670
3楼-- · 2019-07-21 17:25
 精彩回答 2  元偷偷看……

一周热门 更多>