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