原子哥哥以及各位大神,在看原子哥哥的寄存器版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位呢?
详细解读:https://wenku.baidu.com/view/689 ... 4e852458fb39cd.html
一周热门 更多>