发 帖  
原厂入驻New
实战多通道高速精密测温仪的全系列设计教程,以实际项目为依托,提升工程师核心竞争力!→点击立即抢购←
dht11怎么按复位时有响应一下,然后就不响应了
2013-3-20 18:03:18  2299
分享
#include <p18f4520.h>
#include "MACROANDCONST.h"
#include "main.h"

#define io_DHT11_DQ LATBbits.LATB5                                                        //宏定义dht11的一些端口                                  
#define DHT11_DQ_HIGH io_DHT11_DQ = 1;
#define DHT11_DQ_LOW  io_DHT11_DQ = 0;
#define DHT11_DQ_READ PORTBbits.RB5
#define DHT11_DQ_INPUT TRISBbits.TRISB5 = 1;
#define DHT11_DQ_OUT TRISBbits.TRISB5 = 0;

static uint8 FLAG = 2;                                                                                //超时判断
static uint8 Dht11_Rst_Flag = 0;                                                                //复位响应成功标志位
uint8 Rh_Data_T, Rh_Data_L, T_Data_T, T_Data_L, check;
uint8 Rh_Data_T_Temp, Rh_Data_L_Temp, T_Data_T_Temp, T_Data_L_Temp, check_Temp;

void Delay_10us(void)
{
        uint8 i;
        i--;
        i--;                                          
        i--;
        i--;
        i--;
        i--;
        i--;
        i--;                                          
        i--;
        i--;
        i--;
        i--;
}

void v_Dht11_init_f(void)                                                                        //dht11复位响应
{
        DHT11_DQ_HIGH
        DHT11_DQ_OUT
        DHT11_DQ_LOW
        IF (time0_20ms == 1)
        {
                        time0_20ms=0;                          //主机拉低电平20ms
                        DHT11_DQ_HIGH                                        //主机拉高电平,等待3us
                        Delay_10us();
                        Delay_10us();
                        Delay_10us();
                        DHT11_DQ_INPUT                             //设置为输入   

                       /*************************************************
                         怎么在这里上电复位时,有响应一下,然后就读不到高电平了
                         ***************************************************/
                        if (!DHT11_DQ_READ)                   //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
                        {
                                FLAG = 2;
                                while((!DHT11_DQ_READ)&&FLAG++);
                                FLAG=2;
                                while((DHT11_DQ_READ)&&FLAG++);
                                Dht11_Rst_Flag=1;               
                        }                       
        }       
}

uint8 v_Dht11ReadData_f(void)
{
        static uint8 dht11_temp=0;
        static uint8 i;
        DHT11_DQ_INPUT                             //设置为输入
        for(i=0;i<8;i++)
        {
                FLAG=2;
                while ((!DHT11_DQ_READ) && FLAG++);
                Delay_10us();
                Delay_10us();
                Delay_10us();
                Delay_10us();
                dht11_temp <<= 1;       
                if (DHT11_DQ_READ)
                {
                        dht11_temp |= 0x01;
                }
                else
                {
                        dht11_temp &= 0xfe;
                }
                FLAG = 2;
                while ((DHT11_DQ_READ)&&FLAG++);
                if (FLAG==1)
                        break;
        }
        return dht11_temp;
}

void v_TRHUpdata_f(void)
{
        static uint8 num;
        v_Dht11_init_f();
        if(Dht11_Rst_Flag==1)
        {
                Dht11_Rst_Flag = 0;
                Rh_Data_T_Temp = v_Dht11ReadData_f();
                Rh_Data_L_Temp = v_Dht11ReadData_f();
                T_Data_T_Temp = v_Dht11ReadData_f();
                T_Data_L_Temp = v_Dht11ReadData_f();       
                check_Temp = v_Dht11ReadData_f();
                num = Rh_Data_T_Temp + Rh_Data_L_Temp + T_Data_T_Temp + T_Data_L_Temp;
                if (num == check_Temp)
                {
                        Rh_Data_T = Rh_Data_T_Temp;
                        Rh_Data_L = Rh_Data_L_Temp;
                        T_Data_T = T_Data_T_Temp;
                        T_Data_L = T_Data_L_Temp;
                        check = check_Temp;       
                }
                         DHT11_DQ_HIGH
                DHT11_DQ_OUT
        }
}



0
2013-3-20 18:03:18   评论 分享淘帖
3 个讨论
那里写错了,第一次响应后,就来是读不到低电平(dht11无响应)
2013-3-20 18:05:00 评论

举报

我也刚刚弄完了个 我是用51写的 DHT11对时间延迟非常严格  
2013-4-16 18:00:43 评论

举报

兄弟 你的问题解决了吗? 我也碰到同样的问题
2018-8-19 22:23:59 评论

举报

只有小组成员才能发言,加入小组>>

531个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /10 下一条

快速回复 返回顶部 返回列表