楼主数据线设的P3^6 可是 没有把端口设置成开漏,可以设置一下试试 。我今天把sda换到P0口 程序不至于卡死了。。虽然取值还不对 。感觉之前卡死是因为从机没法置低导致开在while判断上了 |
对了还有个现象 卡住以后 湿度高位不知道为什么变成了255.。。 |
想知道楼主解决了吗? 。。。表示碰到了一样的问题 。。把dht11拔了 别的都正常,插上dht11就卡住了 感觉上好像是卡在某个while里面了。。。。。。。作为一个初学者毫无头绪 ![]() |
84行到88行的代码不合适吧?对照数据手册看看。单片机时钟必须跟延时函数一致;延时函数尽量放在当前c文件里,不要放在其它文件里;以下代码仅供参考: io_DHT11 = 0; //主机拉低 >18ms Delay25ms(); io_DHT11 = 1; //20~40us后从机应答拉低电平 Delay60us(); //延时大于(20~40us) if(io_DHT11 == 0) //判断从机是否响应 { if (DHT11_WaitLevelChange(0) == isNo) return isNo; //规定时间内电平0是否改变?如果未改变返回isNo if (DHT11_WaitLevelChange(1) == isNo) return isNo; //规定时间内电平1是否改变?如果未改变返回isNo i = 0; ucArrTemp[i++] = DHT11_ReadByte(); ucArrTemp[i++] = DHT11_ReadByte(); ucArrTemp[i++] = DHT11_ReadByte(); ucArrTemp[i++] = DHT11_ReadByte(); ucArrTemp[i] = DHT11_ReadByte(); |