![]() |
沒有看到你單片機的型號描述,也沒有指出所用晶振是內部晶振還是外部晶振。下面從幾點常見問題分析下: 1、除了樓上所說的IO口有沒有被其他電路占用外,還要知道該IO口總線上必須外接上拉電阻。這是單總線通信要求。上拉電阻4.7K~10K范圍。 2、單總線通信需要嚴格的時序,這樣一定檢查下程序的延時函數是否準確,尤其us級延時對51單片機來說是個考驗,但這也是很多初學者調試出錯的問題點。 |
小臭臭廢 發表于 2024-1-13 16:37 d18b20復位成功當然接收到1,收到0反而怪了。如果一定想以收到0判斷復位失敗可以改寫: bit DS18B20_Reset() { DQ=0; //送出低電平復位信號 delay_us(240); //延時至少480us delay_us(240); DQ=1; //釋放數據線 delay_us(60); //等待60us if(!DQ) //如果DQ低電平 { delay_us(240); //等待設備釋放數據線 delay_us(180); return 1; //返回1 } else //DQ低電平 { delay_us(240); //等待設備釋放數據線 delay_us(180); return 0; //返回0 } } |
小臭臭廢 發表于 2024-1-13 16:37 30塊包郵的邏輯分析儀,你值得擁有 |
網上很多ds18b20的通信程序啊,用網上的程序試試唄,首先排除硬件問題 |
lkc8210 發表于 2024-1-12 21:34 哈哈,傻了。改了但還是接受不到0 |
第8行沒報錯嗎? |
沒有看到你單片機的型號描述,也沒有指出所用晶振是內部晶振還是外部晶振。下面從幾點常見問題分析下: 1、除了樓上所說的IO口有沒有被其他電路占用外,還要知道該IO口總線上必須外接上拉電阻。這是單總線通信要求。上拉電阻4.7K~10K范圍。 2、單總線通信需要嚴格的時序,這樣一定檢查下程序的延時函數是否準確,尤其us級延時對51單片機來說是個考驗,但這也是很多初學者調試出錯的問題點。 ![]() ![]() ![]() ![]() ![]() 3、當然還有一個重要原因要注意DS18B20元件的方向,一旦方向接反芯片燒壞的可能性極大。那么就不要再次使用了。附件給基于單片機STC8A8K64D4的DS18B20程序源碼,個人認為這一家寫的程序源碼很規范,參考性很強。 |
29.58 KB, 下載次數: 3
joyb 發表于 2024-1-12 11:21 應該沒有,這個I/o就做這一個活 |
IO口是否有沖突 |