标题: C语言dat<<=1; dat|=SDA怎么移位啊,视频里说SDA=1也和移位有关系 [打印本页]

作者: x51hei666    时间: 2020-2-23 10:26
标题: C语言dat<<=1; dat|=SDA怎么移位啊,视频里说SDA=1也和移位有关系
unsigned char i2creadbyte()         //读取字节
{
   unsigned char a,dat=0;
   SDA=1;
   Delay10us();
   for(a=0;a<8;a++)
   {
      SCL=1;
      Delay10us();
      dat<<=1;
      dat|=SDA;
      Delay10us();
      SCL=0;
      Delay10us();

   }
   return dat;
}




}

作者: adject    时间: 2020-2-23 12:19
   SCL=1;
      Delay10us();
      dat<<=1;  //dat = dat<<1; dat 最低位为0
      dat|=SDA; // dat = dat | SDA;  或取sda的数据 到 dat
      Delay10us();
      SCL=0;
      Delay10us();
作者: man1234567    时间: 2020-2-24 22:07
dat<<=1;  //以二进制方式将 dat 数据位往高位移动,最高位被挤掉最低位补零
dat|=SDA; //以二进制方式将 dat 和 SDA 数据按位取或,因为读取的 SDA 只有 1 位,实际就是 dat 的最低位变成了 SDA 的值.
例 dat=①②③④⑤⑥⑦⑧B,SDA=(因为SDA只能0或1,所以SDA=0000000B),dat<<=1 后 dat=②③④⑤⑥⑦⑧0B,dat|=SDA 后 dat=②③④⑤⑥⑦⑧B ;绕回来(循环)一次是 dat=③④⑤⑥⑦⑧眧B ,直到 dat=眧砧礧稧笧簧紧B 完成数据读取。


作者: xmfjfhcel    时间: 2020-2-25 08:53
楼上解说得太清楚了,学习了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1