PIC单片机读DHT11温湿度传感器,时序应该没问题,但校验通不过,略过校验数值也不对,求大神给看看

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PIC单片机读DHT11温湿度传感器,时序应该没问题,但校验通不过,略过校验数值也不对,求大神给看看相关的知识,希望对你有一定的参考价值。

#define dat RA3
#define dat_in TRISA3=1
#define dat_out TRISA3=0
uchar DHT11[5],RTflag=0;
uchar FLAG; //超时标志位
//uchar wendu[2],shidu[2];

uchar write_byte1() //读一个字节

uchar i,comdata,temp1;
//dat_in;
for(i=0;i<8;i++)

FLAG=2;
while((!dat)&&FLAG++);//判断数据位是0还是1
if(FLAG==1)break; //超时则跳出for循环
delay_10us();
delay_10us();
//delay_10us();
//delay_10us();
temp1=0;
if(dat)temp1=1; // 如果高电平高过预定0高电平值则数据位为 1
FLAG=2;
while((dat)&&FLAG++);//flag先与后加1 如果dat一直为1 uchar型变量 flag 溢出变为0 再自加1

if(FLAG==1)break; //超时则跳出for循环
comdata<<=1;//左移一位 高位在前 低位在后
comdata|=temp1;

return (comdata);

void getwsd() //读5个字节数据 两个字节为温度数据 两个字节为湿度数据 最后一个字节为校验

uchar i,temp; //
dat_out;
dat=0;
delay_ms(20);//主机拉低18ms
dat=1;
//总线由上拉电阻拉高 主机延时20us_40us
delay_10us();
delay_10us();
delay_10us();
//delay_10us();
//主机设为输入 判断从机响应信号
dat_in;
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
if(!dat) //T !

FLAG=2; //超时标志位

while((!dat)&&FLAG++);//判断从机是否发出 80us 的低电平响应信号是否结束
FLAG=2;

while((dat)&&FLAG++); //判断从机拉高80us是否结束
for(i=0;i<5;i++)//数据接收状态

DHT11[i]=write_byte1();

dat=1; //释放数据总线 为下一次读取做好准备
temp=(DHT11[0]+DHT11[1]+DHT11[2]+DHT11[3]);
//if(temp==DHT11[4]) //数据校验

RTflag=1;

if(RTflag==1) //如果RTflag=1 说明读取到得数据正确

RTflag=0;
shidu[0]=DHT11[0]/10+0x30; //小时十位数据
shidu[1]=DHT11[0]%10+0x30; //小时个位数据
wendu[0]=DHT11[2]/10+0x30; //分钟十位数据
wendu[1]=DHT11[2]%10+0x30; //分钟个位数据



参考技术A 应该没问题,说明你还不太确定。

还是用示波器看看波形对不对吧。本回答被提问者和网友采纳
参考技术B 修改相关的延时长短(就是尝试,一直到可以),可以解决这个问题。

谁能帮忙把温湿度传感器dht11和这个单片机连接起来啊~ 账号还有些分

这个是dht11的原理图,连接的是三根线,该怎么接啊

参考技术A VCC接VCC,GND接GND,DATA接单片机的通用IO口中的任何一位都可以追问

看不懂图啊,兄弟 能不能帮麻烦帮画一下啊,

追答

以上是关于PIC单片机读DHT11温湿度传感器,时序应该没问题,但校验通不过,略过校验数值也不对,求大神给看看的主要内容,如果未能解决你的问题,请参考以下文章

毕设求助:单片机始终读不到温湿度传感器DHT22的数据,一直显示00.0

Arduino和C51开发DHT11温湿度传感器

51单片机(DHT11温湿度传感器)

2021-08-29

dht11温湿度传感器怎么与单片机相连得

温湿度传感器