![]() |
發布時間: 2023-3-2 12:51
正文摘要:DS18B20 的位讀寫時序,如圖: 當要給 DS18B20 寫入 0 的時候,單片機直接將引腳拉低,持續時間大于 60us 小于 120us 就可以了。圖上顯示的意思是,單片機先拉低 15us 之后,DS18B20 會在從 15us 到 6 ... |
wulin 發表于 2023-3-3 07:21 謝謝解答,有點理解了! |
cwb2038 發表于 2023-3-2 15:05 簡單的講,寫0就是一段持續60us~ 120us的低電平,寫1就是一個至少1us的低電平,隨后緊接著60us~ 120us的高電平。程序好像并沒有反應出來1us的低電平延時是因為CPU執行兩條語句的時間至少1us,不必單獨寫1us的低電平延時,如果加了一條_nop_();也無所謂。如果使用的高速單片機就要酌情加延時語句。 |
本帖最后由 lkc8210 于 2023-3-3 09:27 編輯 cwb2038 發表于 2023-3-2 15:05
|
本帖最后由 cwb2038 于 2023-3-3 09:29 編輯 qsssuv 發表于 2023-3-2 14:51 這兩句話怎么理解?程序好像并沒有反應出來? 1、當要給 DS18B20 寫入 0 的時候,單片機直接將引腳拉低,持續時間大于 60us 小于 120us 就可以了。 2、 當要給 DS18B20 寫入 1 的時候,單片機先將這個引腳拉低,拉低時間大于 1us,然后馬 上釋放總線,即拉高引腳,并且持續時間也要大于 60us。 |
沒看代碼,直接看你的疑問。你表述DS18B20會在某時間讀取一位,又表述程序沒有反映出15us后讀0,這明顯自相矛盾。DS18B20在什么時間讀MCU在線上發出的電平狀態,為何需要在程序上反映呢?DS18B20讀線上電平關MCU在線上發電平狀態什么事兒?MCU只需要干自己的事就好了 |