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中 展开
{
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中 展开
3个回答
展开全部
连续读取8位数据位,从最高位开始读取,每次读取一位左移一位(retc=retc<<1;),如果SDA为高电平if(SDA==1),retc=retc+1表示该位为高喊姿电平的意弯嫌思,否埋渗手则就是低电平,也就是0,。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
retc=0;
//变量
retc
归零
retc=retc<<1;
//
变量向左移位基袭
if(SDA==1)retc=retc+1;
//
这句话,其实就是接收一个位,因为上一句向左移位了,所以这句话就要接收下一位了,向左移位,最低位为
0,如轮锋冲果接收管脚为
0,那么就是0,如果为1,那么腊歼rec变量应该最低位变为1,程序里
+1,其实就是变最低为
1,以完成数据位的正确接收
//变量
retc
归零
retc=retc<<1;
//
变量向左移位基袭
if(SDA==1)retc=retc+1;
//
这句话,其实就是接收一个位,因为上一句向左移位了,所以这句话就要接收下一位了,向左移位,最低位为
0,如轮锋冲果接收管脚为
0,那么就是0,如果为1,那么腊歼rec变量应该最低位变为1,程序里
+1,其实就是变最低为
1,以完成数据位的正确接收
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询