寄存器版IIC程序 IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));

2019-07-20 10:49发布

原子哥哥以及各位大神,在看原子哥哥的寄存器版IIC程序的时候有个疑问,使我头疼已久。
24cxx.c程序:
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(0XA0+((ReadAddr/256)<<1)); //发送器件地址 0XA0,写数据
这句是什么意思?

按照程序的意思好像是如果没有找到这个器件,那么主器件再重新发送该器件地址同时发送高8位字节地址,
那么问题就来了,按照该芯片的写时序,主机在发送完器件地址0xA0后就要等待从机(也就是该芯片)的应答信号,然后再发送字节地址ReadAddr/256,
可是,程序直接就两个地址相加是什么意思?没有应答信号吗?
还有就是,(ReadAddr/256)就是取得ReadAddr的高8位地址,但是为什么还要左移1位呢?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
正点原子
1楼-- · 2019-07-20 14:32
这是针对24c16以下的芯片才有的操作。
楼主看24c02/04/08等的数据手册,就知道啥意思了。
Sunny^o^
2楼-- · 2019-07-20 15:16
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-20 19:06
 精彩回答 2  元偷偷看……
华兄
4楼-- · 2019-07-20 19:14
本帖最后由 华兄 于 2017-11-28 17:21 编辑

详细解读:https://wenku.baidu.com/view/689 ... 4e852458fb39cd.html

一周热门 更多>