找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2808|回复: 3
打印 上一主题 下一主题
收起左侧

C语言dat<<=1; dat|=SDA怎么移位啊,视频里说SDA=1也和移位有关系

[复制链接]
跳转到指定楼层
楼主
ID:696335 发表于 2020-2-23 10:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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;
}




}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:419968 发表于 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();
回复

使用道具 举报

板凳
ID:584814 发表于 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 完成数据读取。

回复

使用道具 举报

地板
ID:626079 发表于 2020-2-25 08:53 | 只看该作者
楼上解说得太清楚了,学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表