51单片机I2C总线读一个字节if(SDA==1)retc=retc+1;是什么意思?

unsignedcharRcvByte(){unsignedcharretc;unsignedcharBitCnt;retc=0;SDA=1;//置数据线为输入方式for... unsigned char RcvByte()
{
unsigned char retc;
unsigned char BitCnt;

retc=0;
SDA=1; //置数据线为输入方式
for(BitCnt=0;BitCnt<8;BitCnt++)
{
_Nop();
SCL=0; //置时钟线为低,准备接收数据位
_Nop();
_Nop(); //时钟低电平周期大于4.7us
_Nop();
_Nop();
_Nop();
SCL=1; //置时钟线为高使数据线上数据有效
_Nop();
_Nop();
retc=retc<<1;
if(SDA==1)retc=retc+1; //读数据位,接收的数据位放入retc中
_Nop();
_Nop();
}
SCL=0;
_Nop();
_Nop();
return(retc);
}

请问这段什么意思,求指教,谢谢您。
retc=0;
retc=retc<<1;
if(SDA==1)retc=retc+1; //读数据位,接收的数据位放入retc中
展开
 我来答
yelang21
推荐于2016-08-04 · 超过23用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:40.5万
展开全部
retc=0; //变量 retc 归零

retc=retc<<1; // 变量向左移位

if(SDA==1)retc=retc+1; // 这句话,其实就是接收一个位,因为上一句向左移位了,所以这句话就要接收下一位了,向左移位,最低位为 0,如果接收管脚为 0,那么就是0,如果为1,那银乎么rec变量应该最低位锋唯悉变为1,程序里山樱 +1,其实就是变最低为 1,以完成数据位的正确接收
遇到呆子喜欢你
2015-06-30
知道答主
回答量:10
采纳率:0%
帮助的人:13.4万
展开全部
连续读取8位数据位,从最高位开始读取,每次读取一位左移一位(retc=retc<<1;),如果SDA为高电平if(SDA==1),retc=retc+1表示该位为高喊姿电平的意弯嫌思,否埋渗手则就是低电平,也就是0,。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
仆珍闾丘和悌
2020-02-17 · TA获得超过3647个赞
知道大有可为答主
回答量:3178
采纳率:26%
帮助的人:188万
展开全部
retc=0;
//变量
retc
归零
retc=retc<<1;
//
变量向左移位基袭
if(SDA==1)retc=retc+1;
//
这句话,其实就是接收一个位,因为上一句向左移位了,所以这句话就要接收下一位了,向左移位,最低位为
0,如轮锋冲果接收管脚为
0,那么就是0,如果为1,那么腊歼rec变量应该最低位变为1,程序里
+1,其实就是变最低为
1,以完成数据位的正确接收
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式