位带操作-单通信DHT11接收单个bit
位带操作-单通信DHT11接收单个bit操作详解
单总线协议:只有一条数据线,数据只能以比特流的方式传输,所以就会涉及到MSB(高位先出)还是LSB(低位先出),传输方向是半双工通信
点击查看整体代码
//DHT11读取1bit,循环8次,合成1字节 DHT11提供的是以MSB
uint8_t DHT11_ReadByte(void)
{
int i = 0;
//1.定义变量并初始化
uint8_t data = 0; // 0000 0000
//2.循环8次,接收一个字节
for(i = 0;i < 8;i++)
{
data <<= 1;
data |= DHT11_ReadBit();
}
return data;
}
解析位带操作
data <<= 1;
data |= DHT11_ReadBit();
假设DHT11发送的前8bit是 1101 1001 --- MSB
实际发送
实际发送
0000 000 1
0000 000 1
0000 000 0
0000 000 1
0000 000 1
0000 000 0
0000 000 0
0000 000 1
要取最后一个bit,合成一个字节
//1.定义变量并初始化
->data=0000 0000
第一步
(data<<1) ->(0000 000)
(0000 0000)|= (0000 000 1) ->(0000 000 1)
第二步
(data<<1) ->(0000 0010)
(0000 0010)|= (0000 000 1) ->(0000 001 1)
第三步
(data<<1) ->(0000 0110)
(0000 0110)|= (0000 000 0) ->(0000 011 0)
第四步
(data<<1) ->(0000 1100)
(0000 1100)|= (0000 000 1) ->(0000 1101)
省略。。。
第八步
(data<<1) ->(1101 1000)
( 1101 1000 )|= (0000 000 1) ->(1101 1101)
参考李明轩老师第12天的笔记