中级会员
 
- 积分
- 435
- 金钱
- 435
- 注册时间
- 2014-8-16
- 在线时间
- 56 小时
|
5金钱
最近学到IIC这里,以前都只是学24C02,对这段代码有点疑问,于是在论坛看到几个贴子。查了些资料和看了原子哥的回答,好像有点头绪了,于是想请问原子哥,
不知道这样理解对否?希望原子哥指正,如果理解正确的话也可给后来者作参考......
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0); //发送写命令
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr>>8);//发送高地址
}else IIC_Send_Byte(0XA0+((WriteAddr/256)<<1)); //发送器件地址 0XA0,写数据
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr%256); //发送低地址
24C16以上的,从设备地址A0A1A2都没有用了(接地为000),但是要用2个字节才能完整表示内存地址(所以要先写0xa0[10100000],再写高地址,最后写低地址)
24C04/08/16,依次有1-3位从设备地址+8位地址,(WriteAddr/256)<<1就是提取A0A1A2的值,左移是因为最低位为读写操作。(所以先写0xa0+xxx,再写低地址)
而24C02只有8位地址,且A0A1A2三位从设备地址已经包含在8位地址里面了(所以先写0XA0[即(WriteAddr/256)<<1)]=0,再写低8位地址)
|
最佳答案
查看完整内容[请看2#楼]
目测 LZ 理解得对。
24C16以上(不含16),必须在器件地址、字节地址低8位之间,插入一个字节地址中8位。
|