位带操作-单通信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天的笔记
posted @ 2024-07-13 10:19  shishusheng  阅读(7)  评论(0编辑  收藏  举报