i2c总线 读取数据时byte《=1这个移位语句为什么不能在if(SDA == 1) {byte |= 0x01; } 语句后面呢。

unsignedcharI2CRead(void){unsignedcharbyte,i;byte=0;for(i=0;i<8;i++){SCL=0;SDA=1;Dela... unsigned char I2CRead(void)
{
unsigned char byte, i;
byte = 0;
for(i = 0; i < 8; i++)
{
SCL = 0;
SDA = 1;
Delay();
SCL = 1;
Delay();
byte <<= 1;
if(SDA == 1) {byte |= 0x01; }
Delay();
}
SCL = 0;
SDA = 1;
Delay();
SCL = 1;
Delay();
SCL = 0;
return byte;
}
请高手解释一下。
展开
 我来答
furious_tauren
2013-07-08 · TA获得超过4053个赞
知道大有可为答主
回答量:1913
采纳率:100%
帮助的人:746万
展开全部
举个例子,假如前面读了3个bit为0b101,第4个0b1:
byte <<=1 在if 前的结果是正确的: 0b1011
byte >>=1 在if 后的结果是错误的:0b1010

你这是 51 的 i2c? 如果是带 i2c 控制器的 arm,并且跑有 linux 的话,不建议用 gpio 模拟 i2c 总线, 因为进程切换会打乱 i2c 总线时序。
Goddess_cls
2013-07-08 · 超过20用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:49.6万
展开全部
先左移1位在 |0x01的结果和先|0x01 在左移的结果能一样吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式