溫度傳感器DSl8B20在Proteus中的仿真
2 單總線器件DSl8B20的使用
2.1 DSl8B20的工作原理
在該測溫系統中,單片機PICl6F877A作為主機,DSl8B20溫度傳感器作為從機。由于DSl8B20采用的是主從結構,只有主機呼叫從機時,從機才能應答。因此,訪問器件時必須嚴格遵循單總線命令序列,以及初始化、ROM、命令功能的命令。如果序列混亂,則器件不響應主機。從機主機和從機之間的通信通過3個步驟完成:初始化器件;識別器件;交換數據。
單總線器件采用嚴格的通信協議來保證數據的完整性。通信協議包括:復位脈沖、應答脈沖、寫0、寫1、讀O和讀1。所有這些信號都是以先低位、后高位的方式發送的。
(1)復位脈沖和應答脈沖
復位脈沖和應答脈沖即為初始化過程,所有的通信都是以初始化開始的。首先主機要拉低總線至少480μs,接著釋放總線并持續15~60μs,然后進入接收狀態,檢測總線DQ的電平。若DQ為低電平,則表示從機已就緒,可以發送ROM命令。由于C語言簡潔緊湊、靈活方便且可
移植性好,因此本文程序采用C語言來完成。相應的初始化程序如下:
![]() |
![]() |
其中,變量dq用來判斷DSl8B20是否有返回的存在脈沖,為O即有返回脈沖,表明復位成功,可跳出循環;DQ表示總線的電平,當總線為高電平時DQ為1,否則為0;DQ_IO用來表示DQ所連的單片機I/O口的狀態,若該I/O口對單片機是作為輸入使用則DQ_IO為1,作為輸出使用則DQ_IO為O。
(2)寫操作時序
無論是命令還是數據,所有的寫操作都是以字節為單位的,全部以先低位、后高位的方式傳輸的。位寫入過程是這樣的:主機將總線拉低15μs,然后根據要發的那位數據的電平來決定接下來總線的電平。若數據待發位為低電平,則主機須將DQ置為低電平并保持1 5~45μs;若數據待發位為高電平,則主機需將DQ置為高電平且保持15~45μs。發送1位數據的時間(從總線拉低開始到發送結束)必須控制在60~20μ s。
位與位之間要有一個大于1μs的高電平時間間隙隔開。一個字節的數據寫入結束后需要將總線釋放,以確保之后操作的正確進行。
(3)讀操作時序
所有數據的讀取是以字節為單位,以先低位、后高位的方式進行傳輸的。位讀取的過程如下:首先需要主機將總線拉低1~15μs,然后釋放總線,對總線的電平進行判斷。若總線為低電平,說明帶讀取數據位為0;若總線為高電平,則表明帶讀取數據位為1。讀取1位數據的時間(從總線拉低開始到將總線置高準備下一位數據)必須大于60 μs。同樣,位與位之間須有一個大于1 μs的高電平時間間隙隔開。一個字節的數據讀取結束后需要將總線釋放,以確保操作的正確進行。由于DSl8B20的溫度采用9~12位的分辨率,因此一個溫度數據需要讀取2字節的溫度數據。2字節的數據讀取結束后將總線釋放,以便接下來數據的正確傳輸。
評論