熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2019-11-13 23:02
正文摘要:樓主大四,在做一個(gè)基于 51 的智能晾衣架,其中分別使用了 DS18B20、DHT11 檢測溫、濕度,溫度檢測正常,在 dht11 的程序里,通過調(diào)試發(fā)現(xiàn)程序卡死了,在主函數(shù)里讀不出數(shù)據(jù),也無法執(zhí)行后面的程序,單片機(jī)型號是 ST ... |
樓主數(shù)據(jù)線設(shè)的P3^6 可是 沒有把端口設(shè)置成開漏,可以設(shè)置一下試試 。我今天把sda換到P0口 程序不至于卡死了。。雖然取值還不對 。感覺之前卡死是因?yàn)閺臋C(jī)沒法置低導(dǎo)致開在while判斷上了 |
對了還有個(gè)現(xiàn)象 卡住以后 濕度高位不知道為什么變成了255.。。 |
想知道樓主解決了嗎? 。。。表示碰到了一樣的問題 。。把dht11拔了 別的都正常,插上dht11就卡住了 感覺上好像是卡在某個(gè)while里面了。。。。。。。作為一個(gè)初學(xué)者毫無頭緒 ![]() |
關(guān)鍵點(diǎn): 1、不要用DEALY做延時(shí)。 2、等待硬件信號時(shí),要做限時(shí)動作,等不到就返回,并標(biāo)記異常通知主程序。 |
參與人數(shù) 1 | 黑幣 +5 | 收起 理由 |
---|---|---|
![]() | + 5 | 贊一個(gè)! |
84行到88行的代碼不合適吧?對照數(shù)據(jù)手冊看看。單片機(jī)時(shí)鐘必須跟延時(shí)函數(shù)一致;延時(shí)函數(shù)盡量放在當(dāng)前c文件里,不要放在其它文件里;以下代碼僅供參考: io_DHT11 = 0; //主機(jī)拉低 >18ms Delay25ms(); io_DHT11 = 1; //20~40us后從機(jī)應(yīng)答拉低電平 Delay60us(); //延時(shí)大于(20~40us) if(io_DHT11 == 0) //判斷從機(jī)是否響應(yīng) { if (DHT11_WaitLevelChange(0) == isNo) return isNo; //規(guī)定時(shí)間內(nèi)電平0是否改變?如果未改變返回isNo if (DHT11_WaitLevelChange(1) == isNo) return isNo; //規(guī)定時(shí)間內(nèi)電平1是否改變?如果未改變返回isNo i = 0; ucArrTemp[i++] = DHT11_ReadByte(); ucArrTemp[i++] = DHT11_ReadByte(); ucArrTemp[i++] = DHT11_ReadByte(); ucArrTemp[i++] = DHT11_ReadByte(); ucArrTemp[i] = DHT11_ReadByte(); |
參與人數(shù) 1 | 黑幣 +5 | 收起 理由 |
---|---|---|
![]() | + 5 | 贊一個(gè)! |
程序我就不看了,給你個(gè)思路,一般會你這現(xiàn)象的原因有:1,單片機(jī)的中斷標(biāo)志沒清,導(dǎo)致程序一直跑中斷,不運(yùn)行主函數(shù);2,中斷的等級沒處理好,有些函數(shù)被更高級別的中斷阻塞了;3,用了一些空指針,程序跑飛了;4,內(nèi)存占滿了;5,某些寄存器會在某些行為(比如觸發(fā)中斷)后自動清0,導(dǎo)致你的配置被清了;6,你所使用的單片機(jī)這一方面性能不穩(wěn)定(這個(gè)可能非常小這么多年就見過一次,原廠fae都解決不了) |
參與人數(shù) 1 | 黑幣 +5 | 收起 理由 |
---|---|---|
![]() | + 5 | 贊一個(gè)! |
Powered by 單片機(jī)教程網(wǎng)