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