![]() |
發布時間: 2019-11-13 23:02
正文摘要:樓主大四,在做一個基于 51 的智能晾衣架,其中分別使用了 DS18B20、DHT11 檢測溫、濕度,溫度檢測正常,在 dht11 的程序里,通過調試發現程序卡死了,在主函數里讀不出數據,也無法執行后面的程序,單片機型號是 ST ... |
樓主數據線設的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(); |