这是dht11读一个字节的函数。
第一个是可以读到数据。但是数据是错的,延时函数是isp生成的。
第二个读一字节函数读到的全是0。。想了半天没想明白
unsigned char DHT11_Read_Byte(void)
{
unsigned char i,t = 0,dat = 0;
for(i = 0;i < 8;i++)//高位先出
{
while(!DHT11_IO)
{
t++;
Delay1us();
if(t>80) return 1;
}
Delay40us();
dat <<= 1;
if(DHT11_IO == 1)
{
dat |= 0x01;
t = 0;
while(DHT11_IO)
{
t++;
Delay1us();
if(t>80) return 2;
}
}
}
return dat;
}
222222222222222222222222222——
unsigned char DHT11_Read_Byte(void)
{
unsigned char i,t = 0,dat = 0;
for(i = 0;i < 8;i++)//高位先出
{
while(!DHT11_IO)//总线低电平检测(高于50us超时退出)
{
Delay1us();
t++;
if(t > 150) {return 3;}
}
t = 0;
while(DHT11_IO)
{
Delay1us();//1us延时计时
t++;
if(t > 150) { return 4; }//超时检测
}
dat <<= 1;
if(t > 50)
{
dat |= 0x01;//低位置1
}
t = 0;//时间清零
}
return dat;
}
第一个是可以读到数据。但是数据是错的,延时函数是isp生成的。
第二个读一字节函数读到的全是0。。想了半天没想明白
unsigned char DHT11_Read_Byte(void)
{
unsigned char i,t = 0,dat = 0;
for(i = 0;i < 8;i++)//高位先出
{
while(!DHT11_IO)
{
t++;
Delay1us();
if(t>80) return 1;
}
Delay40us();
dat <<= 1;
if(DHT11_IO == 1)
{
dat |= 0x01;
t = 0;
while(DHT11_IO)
{
t++;
Delay1us();
if(t>80) return 2;
}
}
}
return dat;
}
222222222222222222222222222——
unsigned char DHT11_Read_Byte(void)
{
unsigned char i,t = 0,dat = 0;
for(i = 0;i < 8;i++)//高位先出
{
while(!DHT11_IO)//总线低电平检测(高于50us超时退出)
{
Delay1us();
t++;
if(t > 150) {return 3;}
}
t = 0;
while(DHT11_IO)
{
Delay1us();//1us延时计时
t++;
if(t > 150) { return 4; }//超时检测
}
dat <<= 1;
if(t > 50)
{
dat |= 0x01;//低位置1
}
t = 0;//时间清零
}
return dat;
}