打印
[AVR单片机]

请教关于DHT11的问题

[复制链接]
3728|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lhwaizhu|  楼主 | 2012-4-29 18:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天想做一个DHT11的实验,不小心把DHT11的VCC和GND接反了,一会儿就发烫了,结果改过来后DHT11始终没有响应,数据口一直是高电平,不知道是我把DHT11烧了还是程序有问题,下面是程序,谢谢。
#define uchar unsigned char
#define uint  unsigned int
#define DHT11 PA0
#define DHT11_SET  PORTA.0=1
#define DHT11_CLE  PORTA.0=0
#define DHT11_IN   DDRA.0=0
#define DHT11_OUT  DDRA.0=1
#define DHT11_S    PINA.0

uchar U8T_Data_H,U8T_Data_L,U8RH_Data_H,U8RH_Data_L,U8Checkdata;
uchar U8DHTData[5],U8Temp;

void ReData(void)  //接受5个字节的数据
{
        uchar i,j,m;
        for(i=0;i<5;i++)
        {
                U8DHTData[i]=0x00;  //先默认为0,
                for(j=0;j<8;j++)
                {
                        while(!DHT11_S);//等待高电平的到来 一旦出现高电平就开始计数
                        delay_us(60);  //延迟60微秒后 如果还是高电平则此位为1 否则为0
                        if(DHT11_S)
                        {
                                U8DHTData[i]|=(1<<(7-j));
                        }
                }
        }
}
void DHT_GetData(void)
{
        uchar i,DHT11_Temp;
        DHT11_CLE;
        DHT11_OUT;
        delay_ms(20);
        DHT11_SET;
        DHT11_IN;
        delay_us(40);    //适当延迟后判断是否有低电平响应信号  
        DHT11_Temp=DHT11_S;
        if(!DHT11_Temp)
        {
                while(!DHT11_Temp); //等待低电平信号结束
                while(DHT11_Temp); //此高电平结束后的低电平信号为数据开始信号
                ReData(); //接受数据
                DHT11_SET;
                DHT11_OUT;// 输出拉高 读取数据结束
                U8Temp=(U8DHTData[0]+U8DHTData[1]+U8DHTData[2]+U8DHTData[3]);
                //   
                if(U8DHTData[4]==U8Temp)
                {
                        U8RH_Data_H=U8DHTData[0];
                        U8RH_Data_L=U8DHTData[1];
                        U8T_Data_H=U8DHTData[2];
                        U8T_Data_L=U8DHTData[3];              
                }
        }
}

相关帖子

沙发
bestwu7| | 2012-8-26 12:48 | 只看该作者
一下子不会烧坏的,接反这种情况我也遇到过,注意一下你的延时就可以

使用特权

评论回复
板凳
bestwu7| | 2012-8-26 12:59 | 只看该作者
这个U8DHTData[i]|=(1<<(7-j));后面再加个while(DHT11_Temp);应该就没问题了,你试试

使用特权

评论回复
地板
bestwu7| | 2012-8-26 13:00 | 只看该作者
你选择的时钟是多少的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

79

帖子

2

粉丝