IIC程序问题

最近看IIC程序有个地方不太明白请各位指教一番谢谢啦!!!//在AT24CXX指定地址读出一个数据//ReadAddr:开始读数的地址//返回值:读到的数据u8AT24C... 最近看IIC程序有个地方不太明白请各位指教一番谢谢啦!!!
//在AT24CXX指定地址读出一个数据
//ReadAddr:开始读数的地址
//返回值 :读到的数据
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;
}

这段程序中的IIC_Send_Byte(0XA0+((ReadAddr/256)<<1)); 这句话怎么理解啊?
我知道要先写入0XA0之后再写入地址,怎么一次写入了2个字节的东西啊?为什么ReadAddr/256)<<1还左移一位啊???我明白ReadAddr/256是地址的高位。
展开
 我来答
yangguo867
推荐于2017-06-01 · TA获得超过115个赞
知道答主
回答量:103
采纳率:0%
帮助的人:66.4万
展开全部
ReadAddr是个16bit的数据,可分为高8bit和低8bit
两个可能:
1.高8位为寄存器地址的高8位,低8位为寄存器地址的低8位。就像if里面走的
2.高8位为从机地址(slave地址)的一部分,也是7位的slave地址(所以要左移一位(ReadAddr/256)<<1),而且是以0xA0为基址的从机地址,所以从机地址应该是:(0XA0+((ReadAddr/256)<<1)),低8位为寄存器地址的低8位。就像else里面的走的

以上 是我的理解 可能有所偏差
塞菲琴玟玉
2019-03-11 · TA获得超过3689个赞
知道大有可为答主
回答量:3160
采纳率:27%
帮助的人:204万
展开全部
ReadAddr是个16bit的数据,可分为高8bit和低8bit
两个可能:
1.高8位为寄存器地址的高8位,低8位为寄存器地址的低8位。就像if里面走的
2.高8位为从机地址(slave地址)的一部分,也是7位的slave地址(所以要左移一位(ReadAddr/256)<<1),而且是以0xA0为基址的从机地址,所以从机地址应该是:(0XA0+((ReadAddr/256)<<1)),低8位为寄存器地址的低8位。就像else里面的走的
以上
是我的理解
可能有所偏差
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
府妍枋0o
2012-04-27
知道答主
回答量:23
采纳率:100%
帮助的人:20.7万
展开全部
0XA0+((ReadAddr/256)<<1)); 这个只是一个字节。程序在执行的时候是先计算,然后再执行发送的任务的。这个命令字节应该是由几部分组成的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
苏益巩凡桃
2019-08-01 · TA获得超过3711个赞
知道大有可为答主
回答量:3138
采纳率:28%
帮助的人:192万
展开全部
0XA0+((ReadAddr/256)<<1));
这个只是一个字节。程序在执行的时候是先计算,然后再执行发送的任务的。这个命令字节应该是由几部分组成的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式