51单片机I2C总线读一个字节k=(k<<1)|SDA;是什么意思?
发布网友
发布时间:2022-05-22 14:59
我来回答
共2个回答
热心网友
时间:2023-09-09 13:35
正如题目所讲:意思就是读一个字节。
对于一个字节,以8位字节来说,0x00书写成二进制就是00000000。
首先k作为一个变量,初始值假如是0x00,也就是二进制的00000000B,要读取SDA的值,SDA是一个端口,所以一次只能读取一个bit位,也就是二进制的一个位,
k = k|SDA; //把SDA的值赋予k的最低位,
当读取第二位的时候,先得把k的值左移一位,不然就重叠了,所以(k<<1);
因此就有了这个语句:
k=(k<<1)|SDA;
一直循环8次,就实现了用一个端口输出一个8位字节的数据。
热心网友
时间:2023-09-09 13:35
k 是八位的变量。
k=(k<<1),左移一位。
在右边,腾出一个空位,自动补上0。
|SDA,把 SDA (可能是1,也可能是0),加入到空位中。
循环八次,就把 SDA 读出了八遍,依次写到 K 的八个位中。