【藍橋杯單片機11】單總線溫度傳感器DS18B20的基本操作
www.xmf393.com / 廣東職業技術學院 歐浩源
單總線數字溫度傳感器DS18B20幾乎成了各類單片機甚至ARM實驗板的標配模塊來,在藍橋杯的往屆省賽和國賽中,這個內容考查的頻率也相當的高。不管是單片機學習還是藍橋杯備賽,都應掌握DS18B20的基本操作,也就是把傳感器的數據讀出來。
1、關於DS18B20你應該知道
在藍橋杯“單片機設計與開發”賽項中,會提供一個關於DS18B20的庫文件,里面有傳感器復位、寫字節和讀字節三個函數。所以,你不一定要把單總線的時序搞清楚,但你一定要把DS18B20的基本操作流程弄明白。
DS18B20單線通信功能是分時完成的,它有嚴格的時隙概念,如果出現序列混亂,器件將不響應主機,因此讀寫時序很重要。
通過單線總線端口訪問DS18B20的協議如下:
步驟1: 復位初始化
步驟2: ROM操作指令
步驟3: DS18B20功能指令
DS18B20的高速暫存存儲器由9個字節組成,當溫度轉換命令發布后,經轉換所得的溫度值以二字節補碼形式存放在高速暫存存儲器的第0和第1個字節。在上電狀態下,DS18B20默認的精度為12位。啟動后它保持低功耗等待狀態。當需要執行溫度測量和AD轉換時,總線控制器必須發出溫度轉換命令。在那之后,產生的溫度數據以兩個字節的形式被存儲到高速暫存器的溫度寄存器中,DS18B20繼續保持等待狀態。單片機可通過單線接口可以讀到該數據,讀取時低位在前,高位在后。
2、三個重要的DS18B20指令
<1> CCH:跳過ROM指令,忽略64位ROM地址,直接向DS18B20發起各種溫度轉換指令。
<2> 44H:溫度轉換指令,啟動DS18B20進行溫度轉換,轉換時間最長為500ms(典型值為200ms),結果保存在高速RAM中。
<3> BEH:讀暫存器指令,讀取高速暫存存儲器9個字節的內容。
3、讀取一次DS18B20溫度的基本操作
<1> 主機對DS18B20進行復位初始化。
<2> 主機向DS18B20寫0xCC命令,跳過ROM。
<3> 主機向DS18B20寫0x44命令,開始進行溫度轉換。
<4> 等待溫度轉換完成。
<5> 主機對DS18B20進行復位初始化。
<6> 主機向DS18B20寫0xCC命令,跳過ROM。
<7> 主機向DS18B20寫0xBE命令,依次讀取DS18B20發出的從第0一第8,共九個字節的數據。如果只想讀取溫度數據,那在讀完第0和第1個數據后就不再理會后面DS18B20發出的數據即可,或者通過DS18B20復位,停止數據的輸出。
具體的代碼實現,可以參考一下框架:
4、單元實訓題目
注意:如果你利用大賽提供的DS18B20的庫文件,也就是onewire.c和onewire.h,進行程序設計的時候,沒能正確的讀出溫度傳感器的數值,對庫文件中代碼的時序進行適當的調整即可。至於怎么調整,調整多少,要實際調試。
【注】:更多的資源和資料、MM模式源碼下載、IO模式源碼資源,詳見“小蜜蜂筆記”以下鏈接: