PIC单片机与AM2302温湿度传感器通信优化
AM2302温湿度传感器采用单总线方式与MCU通信,这就要求MCU有一定的处理速度,
才能正确解析收到的AM2302发送过来的数据。
MCU处理AM2302数据的方式
AM2302一次传送40位数据给MCU。数据位0由50微妙低电平加26微妙高电平组成。
数据位1有50微妙低电平加70微妙高电平组成。这种编码方式有点象NEC的红外传输协议。
另外AM2302需要由MCU发起启动信号。所以针对这种单线协议,虽然可以采用电平
变化中断+计数器,或输入捕捉来解析40位数据位。但这就需要切换端口的输入输出
配置及控制相应外设的介入时机。
本文介绍的方法采用简单的端口读+延时操作来解析40位数据位。
if (data_port == 1)
delay_us(30);
if (data_port == 1)
//bit = 1
else
//bit = 0
起始信号通过把端口改为输出,然后通过写端口+延时来实现。
//改变data_port为输出
data_port = 0;
delay_us(1000);
data_port = 1;
delay_us(20);
//改变data_port为输入
数据读取函数实现
根据上述协议的描述,很容易抽象出如下函数:
static unsigned char am2302_read_byte