由于要使用24wc256 将原来板子上的02 更换为256
1.修改24cxx.h文件下的 #define EE_TYPE AT24C256
2.修改24cxx.c 文件下的 u8 AT24CXX_Check(void)
[mw_shl_code=applescript,true]u8 AT24CXX_Check(void)
{
u8 temp;
temp=AT24CXX_ReadOneByte(32767);//
if(temp==0X55)return 0;
else
{
AT24CXX_WriteOneByte(32767,0X55);
temp=AT24CXX_ReadOneByte(32767);
if(temp==0X55)return 0;
}
return 1;
}[/mw_shl_code]
测试出现乱码
开机 单独读一个字节时 正确 再读错误为255
此时bug出现 2.3 和3.0 的例程里面均有该bug
下面为3.0例程的 源程序
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);//·¢Ë͸ߵØÖ·
IIC_Wait_Ack();
}else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));
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;
}
eeprom大于 16时就会使用高低地址 源程序出错在使用了两次等待应答 将上面的应答屏蔽即可 如下
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);//·¢Ë͸ߵØÖ·
// IIC_Wait_Ack(); 屏蔽或者删除即可
}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;
}
再次测试问题解决
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>