搞不懂为什么要这样,看单片机的DHT11可用程序上是这样的。总觉得怪。
uchar dht_readat() //接收一个8 位数据,先高位后低位
{
uchar i=0,dat=0;
for(i=0;i<8;i++)
{
dht_num=2;
while((dht_dat==0)&&(dht_num++));
dht_delay_10us();dht_delay_10us();dht_delay_10us();dht_delay_10us();
dat=dat<<1;
if(dht_dat==1)
{
dht_num=2;
dat=dat|0x01;
while((dht_dat==1)&&(dht_num++));
}
}
return dat;
}
void dht_getdat() //给DHT11 一个开始信号,然后读取一次数据,共五个8 位字节
{
uchar i=0;
dht_dat=0;
dht_delay_10ms(4);
dht_dat=1; //单片机给起始脉冲信号
dht_delay_10us();dht_delay_10us();dht_delay_10us();dht_delay_10us();
dht_dat=1; //稍作延时,等待DHT11 返回响应(响应为低电平)
if(dht_dat==0) //有响应才接收数据,否则不作处理
{
dht_num=2;while((dht_dat==0)&&(dht_num++));
dht_num=2;while((dht_dat==1)&&(dht_num++));
dht_d1=dht_readat();
dht_d2=dht_readat();
dht_t1=dht_readat();
dht_t2=dht_readat();
dht_chk=dht_readat();//一次读出五个数据
}
dht_dat=1; //释放总线
dht_delay_10ms(10); //稍作延时
}