打印
[AVR单片机]

atMega8芯片读DHT11?

[复制链接]
4191|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Ganger929|  楼主 | 2009-8-18 17:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Ganger929 于 2009-8-18 17:42 编辑

按DHT11的时序图读,发现读出的数据始终是 42 170 170 170,即00101010 10101010 10101010 10101010,这是怎么回事呢

程序如下:

INT8U  DHT11Reset(void)
{
    INT8U  presence;

    INT16U  U8FLAG;
   
    DHT11_OUT();
    DHT11_SET();
    //_delay_us(6);
    DHT11_CLR();
    _delay_ms(20);
    DHT11_IN();
    DHT11_SET();
   
        asm("nop");
        while(((DHT11_READ()))&&(U8FLAG++));
        if(U8FLAG==1) presence = 1;
        else presence = 0;

//    _delay_us(30);
//    DHT11_IN();
//    presence = DHT11_READ();
    return presence;
}
/*读数据程序*/
INT8U  DHT11Read(void)
{
    INT8U  U8comdata,i,U8temp;
    INT16U  U8FLAG;

    for(i=0;i<8;i++)      
    {
        DHT11_IN();
        DHT11_CLR();
        asm("nop");

        U8FLAG=2;   
        while(((DHT11_READ()==0))&&(U8FLAG++));

        U8temp=0;
        _delay_us(30);

        if(DHT11_READ()){U8temp=1;}

        //if(DHT11_READ()){U8comdata|=0x01;}
        //else{U8comdata&=0xFE;}
      
        U8FLAG=2;
        while((DHT11_READ())&&(U8FLAG++));

        //超时则跳出for循环         
        if(U8FLAG==1)break;
        //判断数据位是0还是1     
              
        // 如果高电平高过预定0高电平值则数据位为 1     
        
        U8comdata<<=1;
        U8comdata|=U8temp;        //0
     }//rof
     return U8comdata;
}

INT16U  DHT11GetHum(void)
{
    INT16_TO_INT8  value, v2;
    INT16U  U8FLAG;

    cli();
    if(DHT11Reset())
    {
      sei();
      return(0xFFFF);
    }
    U8FLAG=2;
     //判断从机是否发出 80us 的低电平响应信号是否结束     
       while((DHT11_READ()==0)&&(U8FLAG++));
       U8FLAG=2;
     //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
       while((DHT11_READ())&&(U8FLAG++));
      
    value.i8[1]=DHT11Read();
    value.i8[0]=DHT11Read();
/*
    v2.i8[1]=DHT11Read();
    v2.i8[0]=DHT11Read();
U8FLAG = DHT11Read();
printf("%d %d %d %d %d\n", value.i8[1], value.i8[0], v2.i8[1], v2.i8[0], U8FLAG);
*/
    sei();
    return value.i16;
}

相关帖子

沙发
ken6703511| | 2009-8-19 16:00 | 只看该作者
ATMEL授权代理商
    香港百特(集团)电子有限公司是专业的集成电路产品分销商,十五年的持续高速发展使百特成为业界杰出的分销商的代表。公司成立于1993年,1994年取得美国Atmel公司的产品代理权,在全国各重要城市,包括深圳、北京、上海、大连、西安、重庆、广州、青岛等都有销售网络,实现百特对整个大中国区业务的有效运作。作为技术驱动型分销企业,百特拥有经验丰富的技术支持团队和系统的流程服务,提供针对客户需要的新产品推介、快速样品、应用咨询、方案及软件设计、开发环境、售后及物流等方面的专业服务。百特和客户的关系不仅仅是买和卖,更多的是战略合作关系。与客户共同成长是百特的期望。

深圳办事处地址:深圳市福田区福虹路世贸大厦A座1603室

电话:0755-83676383-889

MSN:linsheng1118@hotmail.com

QQ:6703511

使用特权

评论回复
板凳
njdongda| | 2009-10-7 21:37 | 只看该作者
DHT11是啥?
SHT11?

使用特权

评论回复
地板
Karlshen| | 2009-10-7 23:06 | 只看该作者
AVR 单片机 atMega8芯片资料多看看也许会有启发

使用特权

评论回复
5
lovelyegle| | 2009-10-7 23:27 | 只看该作者
3#如果没猜错的话DHT11应该是一种传感器的代号

使用特权

评论回复
6
wangwo| | 2009-10-7 23:30 | 只看该作者
太长,最好面对面请教前辈。

使用特权

评论回复
7
蓝正君m2009| | 2011-7-15 18:55 | 只看该作者
晕,看看DHT11后在发表意见。

使用特权

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

本版积分规则

1

主题

1

帖子

0

粉丝