为何STC15读DHT11数据时为何读不到低电平?
2019-07-15 08:55发布
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
本人最近用STC15操作DHT11发现无反应,仿真后发现读取函数卡在等待低电平那里,不管如何修改程序还是无法读取数据,求各大神能帮忙看一下程序,指出错误,谢谢各位。(完整工程在附件里面)
#include "all.h"
sbit DB=P1^1;
void delay(u8 i)//25US
{
u8 a;
while(i--)
{
for(a=0;a<21;a++);
}
}
void Delay30us() //@11.0592MHz
{
unsigned char i;
_nop_();
_nop_();
i = 80;
while (--i);
}
void delay90us() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
_nop_();
i = 1;
j = 244;
do
{
while (--j);
} while (--i);
}
void delay18ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 1;
j = 194;
k = 160;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void shutdown()
{
P0=0x0f;
P2=0xa0;
P2=0x00;
P0=0xff;
P2=0xe0;
P2=0x80;
P2=0x00;
P0=0x00;
P2=0xc0;
P2=0x00;
}
unsigned char dht11_rd(void)//dht11 Êý¾Ý¶ÁÈ¡
{
u8 i,temp;
u8 dat;
for(i=0;i<8;i++)
{
while(!DB);
Delay30us();
temp = 0;
if(DB == 1)
{
temp = 1;
}
while(DB);
dat<<=1;
dat = dat|temp;
}
return dat;
}
unsigned int dht11_rec(void)
{
u16 TRH;
u8 undata;
u8 TH_data,TL_data,RH_data,RL_data,CK_data;
DB=1;
DB=0;
delay18ms();
DB=1;
delay(1);//³õʼ»¯dht11
while(DB==0);//µÈ´ýµÍµçƽ
while(!DB);//µÈ´ý¸ßµçƽ
delay90us();//ÑÓʱ
if(!DB)
{
while(!DB);
while(DB);
RH_data = dht11_rd();
RL_data = dht11_rd();
TH_data = dht11_rd();
TL_data = dht11_rd();
CK_data = dht11_rd();
undata = RH_data + RL_data + TH_data + TL_data;
}
DB=0;
delay(2);
DB=1;
if(undata==CK_data)
{
TRH=RH_data;
TRH<<=8;
TRH=(TRH|(TH_data));
return TRH;
}
else
return 0;
}
-
-
DHT11.zip
下载积分: 积分 -1 分
43.25 KB, 下载次数: 2, 下载积分: 积分 -1 分
一周热门 更多>