PIC单片机与AM2302温湿度传感器通信优化

本文介绍了如何在系统时钟为1 MHz的情况下,优化PIC单片机与AM2302温湿度传感器的单总线通信,解决由于低功耗导致的解析数据错误问题。通过调整函数实现,减少指令周期,使用宏函数和优化数据位1的逻辑,成功实现了在低功耗模式下的稳定通信。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值