寄存器版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位呢?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。