I2C总线在读一个字节时候程序看不懂,请教下

2019-07-15 13:01发布

uchar readbyte()
{
      uchar i,k;
      SCL=0;
      delay();
      SDA=1;
      for(i=0;i<8;i--)
      {
            SCL=1;
            delay();
            k=(k<<1)|SDA;//这一句看不懂,不知道为什么就能完成8位的接收
            SCL=0;
            delay();
      }
       delay();
       return k;
}

书上的解释是:串行接收一个字节时需要将8位一位一位地接收,然后再组合成一个字节,上面代码中我们定义了一个临时变量k,将k左移一位后与SDA进行“或”运算,依次把8个独立的位放入一个字节中来完成接收。

它为什么要k<<1之后与SDA1  按位或?怎么完成把8位放入一个字节? 这个字节放入了谁中?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
我会告诉你真名
1楼-- · 2019-07-15 13:43
按位或的意思就是强行让某一位为1,这里或的是1,意思就是把最低位置为1,然后通过左移操作把当前位往高位移 最佳答案
275849752
2楼-- · 2019-07-15 15:30
 精彩回答 2  元偷偷看……
275849752
3楼-- · 2019-07-15 21:06
哪位帮帮忙啊。。。
我会告诉你真名
4楼-- · 2019-07-15 21:15
学了模电的话这个还是比较好理解的,你可以试着把k字节的每一位画出来,然后跟着程序模拟一次就能理解大概了,希望能帮到你,有什么问题欢迎讨论
275849752
5楼-- · 2019-07-15 23:41
我会告诉你真名 发表于 2016-9-24 19:40
学了模电的话这个还是比较好理解的,你可以试着把k字节的每一位画出来,然后跟着程序模拟一次就能理解大概了,希望能帮到你,有什么问题欢迎讨论

理解一些了,但是这个“按位或”是为什么?什么用呢

一周热门 更多>