foxwolf200 发表于 2013-12-9 17:15:45

毫无反映的DHT11代码,是不是我理解的太简单了,请大神看看

#define DHT_H_1 PORTD|=(1<<PD7)
#define DHT_L_0 PORTD&=~(1<<PD7)
#define DHT_Out_1 DDRD|=(1<<PD7)
#define DHT_in_0 DDRD&=~(1<<PD7)
uchar DHT_Read()
{
uchar i,Data1=0;
for (i=0;i<8;i++)
{
   while(PIND7==0);//等待数据开始的低电平结束
_delay_us(28); //等待28us
   Data1<<=1;
   
   if (PD7==1)//如果等待28us后 pin7为高电平该信号为1
   {
    Data1|=0x01;
   }
   else
   {
    Data1|=0x00;
   }
   while(PIND7==0);//等待结束低电平结束,以便开始下一个数据的接收
}
return Data1;
}
void DHT_Data()
{
   uchar i;
   DHT_Out_1;//DDR pin7输出
DHT_L_0; // 把pin7高电平拉低
_delay_ms(18);//拉低持续2ms,资料上说是拉低大于1ms
   DHT_H_1;//释放pin7
   DHT_in_0;//设置pin7为输入
DHT_H_1;
   _delay_us(25);//总线由上拉电阻拉高主机延时 >20us等待25us以便DHT应答
if(PIND7==0)//检测pin7状态。DHT是否拉低PIN7响应
{
    while(PIND7==0)//等待DHT拉低PIN7 80us
    while(PIND7==1)//等待DHT释放PIN7 80us
    for (i=0;i<5;i++)//开始数据传输
   {
   TempData=DHT_Read();
    }   
   }
}

foxwolf200 发表于 2013-12-10 20:27:26

木有人知道吗?
页: [1]
查看完整版本: 毫无反映的DHT11代码,是不是我理解的太简单了,请大神看看