关于51单片机中DHT11温湿度传感器器问题 20

大神帮忙看一下我这个程序出在哪嘛,问什么温湿度传感器没响应,采集不了数据,我真的服了。晶振22.1184MHz的1T单片机,DHT11并没有将总线拉低(我设置报警判断过)... 大神帮忙看一下我这个程序出在哪嘛,问什么温湿度传感器没响应,采集不了数据,我真的服了。晶振22.1184MHz的1T单片机,DHT11并没有将总线拉低(我设置报警判断过)。但是用他人的11.0592MHz单片机通过串口发数据就能响应,不过程序是网上的,我的程序跟网上差不多啊。
void Delay_ms(unsigned int dly)
{
unsigned int dly1; //内循环变量
while(dly--) //外循环,递减至0
{dly1=950; while(dly1--);} //内循环,延时1ms
}
void delay_10us(uint t)
{
for (;t>0;t--)
{
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
}
}
uchar send_byte(void)//送出一个字节
{
uchar i,b;
uint c;
for(i=0;i<8;i++)
{ c=2;
while((!DHT11_Bus)&&(c++)); //将总线拉低,等待50us开始信号结束数据,开始传输
//a=DHT11_Bus; //DHT11将总线拉高,
delay_10us(8); //延时到26-28us时,表示输出0
b=0;
if(DHT11_Bus)
b=1;
c=2;
while((DHT11_Bus)&&c++);//超时则跳出for循环
if(c==1)break;
RT_type<<=1;
RT_type|=b; //将RT_type和b”或“运算,所得的结果,送到RT_type中
}
return RT_type; //到此,一个字节发送完,将其返回
}
//读取一路湿温度值
void read_DHT11()//
{
uchar a,R_H,R_L,T_H,T_L,RT_check;
uint c;
DHT11_Bus=0; //在将总线拉低,传感器读取设备发出的响应信号
Delay_ms(18); //大于18ms
DHT11_Bus=1; //再释放总线,等待传感器响应信号
delay_10us(3); //发送开始信号结束后,延时20-40us即可,
DHT11_Bus=1; //主机将总线拉高,判断从机DHT11响应信号
if(!DHT11_Bus) //判断总线是否有低电平响应
{
c=2;
while((!DHT11_Bus)&&(c++));//判断从机发出80us 的低电平响应信号是否结束
c=2;
while(DHT11_Bus&&(c++)); //判断从机发出80us 的高电平是否结束

R_H=send_byte();
R_L=send_byte();
T_H=send_byte();
T_L=send_byte();//读取温度值
RT_check=send_byte();; //读取校验位
delay_10us(100);
DHT11_Bus=1;//读取完毕,从机拉低总线50us,后将总线空闲
a=(R_H+R_L+T_H+T_L); //得到前四组8位数据相加送入a
if(a==check) //判断a是否与校验位RT_check相等
{RH=R_H;RL=R_L;TH=T_H;TL=T_L;check=RT_check;}//取出温度和湿度高8位
}

// RH=34;TH=26;
table_R[0]=RH/10+0x30;
table_R[1]=RH%10+0x30;
table_T[0]=TH/10+0x30;
table_T[1]=TH%10+0x30;
}
说明:DHT11_Bus数据总线,程序中没有定义的变量RH、TH、TL、RL、table_R[i]都是全局变量,没有别的意思,//后面的东西代表不用,请大神们注意!
展开
 我来答
傍轴
2015-06-17 · TA获得超过944个赞
知道小有建树答主
回答量:733
采纳率:71%
帮助的人:246万
展开全部
是不是你的delay函数有问题?内部软件延时跟晶振以及单片机工作速度有关,建议用keil模拟计算一下使用的单片机的实际延时,可能是延时时间不够,导致对应的时序出现问题。
周末实验室
2021-03-20 · TA获得超过126个赞
知道答主
回答量:234
采纳率:100%
帮助的人:18.4万
展开全部

第44期《Arduino入门》传感器 05:温度与湿度传感器 DHT11(上)

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
丶鱼紫酱
2019-05-07
知道答主
回答量:3
采纳率:0%
帮助的人:2793
展开全部
解决了吗?我也发生了一样的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hongtanqi
2015-05-14 · TA获得超过294个赞
知道小有建树答主
回答量:159
采纳率:100%
帮助的人:70.1万
展开全部
程序太长,没细看。51单片机有个毛病,读数据之前要先将该位置1,不知你是不是注意到了
追问
你好,你这个想法到时提示了我,但是一般都是默认准双向I/O,用在其他情况都没事啊,如果改了能实现,我再给你些财富值,希望你多提点其他的建议!
试过还是不行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式