基于DS18B20和AT89C52的溫度測量和顯示系統
0 引言
傳統的溫度檢測大多以熱敏電阻為溫度傳感器,而熱敏電阻的可靠性差,測量溫度準確率低,且必須轉換為數字信號后才能由單片機進(jìn)行處理,在高精度要求的溫度檢測應用中,熱敏電阻已經(jīng)被精度高、準確性好的集成溫度采集設備所代替。DS18B20是美國DALLAS半導體公司推出的一種改進(jìn)型數字溫度傳感器。它在溫度精度、轉換時(shí)間、傳輸距離、分辨率等方面有很大改進(jìn),因而被廣泛應用于溫度采集與處理、數字溫度計及各種溫控系統中。本文采用DS18B20設計的溫度測量與顯示系統,可以實(shí)時(shí)測量并顯示的溫度范圍為-55~125℃。系統可設置溫度上限和溫度下限,當測量溫度高于上限或者低于下限溫度時(shí),系統將發(fā)出報警。
DS18B20是美國DALLAS半導體公司推出的一種改進(jìn)型智能溫度傳感器,該傳感器的可測溫度范圍為-55~125℃,可編程分辨率為9~12位,對應的可分辨溫度為0.5℃、0.25℃、0.125℃和0.062 5℃。DS18B20的測量輸出為數字信號,并可單線(xiàn)串行發(fā)送給CPU,并支持多點(diǎn)組網(wǎng)。DS18B20有3腳和8腳兩種結構,而8腳的結構又有不同的封裝形式,圖1所示是DS18B20的引腳圖。本文采用三極管形狀的3腳DS18B20。
事實(shí)上,無(wú)論是3腳結構還是8腳的結構,DS18B20在實(shí)際電路中都只有3個(gè)引腳參與連接,即電源(VDD)、地(GND)和信號輸入輸出(DQ)。
電路中的單片機采用AT89C52,DS18B20采用外部電源供電方式,其DQ端子與單片機的P3.7相連。采用兩個(gè)4連排共陽(yáng)極數碼管顯示實(shí)時(shí)溫度,分別用于顯示整數部分和小數部分。數碼管的段選線(xiàn)與單片機的P1口相連,位選線(xiàn)與P2口相連。圖中顯示的正是最高溫度125℃,由于在proteus軟件中DS18B20無(wú)法設置小數,所以小數部分只能顯示零了。DS18B20的最高分辨率為0.0625℃,所以理論上應該能顯示4位小數。
3 軟件設計
本系統的軟件設計主要包括三部分,一是溫度測量部分,二是溫度顯示部分,還有一個(gè)是報警部分。
DS18B20通過(guò)嚴格的單線(xiàn)通信協(xié)議來(lái)保證數據完整。該協(xié)議中定義了復位脈沖、存在脈沖、寫(xiě)0、寫(xiě)1、讀0、讀1等幾種信號形式。其中,只有存在脈沖是由總線(xiàn)受控(即DS18B20)發(fā)出,其他的全部由總線(xiàn)主控(即單片機)發(fā)出。
3.1 初始化
DS18B20的初始化包括來(lái)自單片機的復位脈沖和接下來(lái)由DS18B20發(fā)出的存在脈沖。其初始化時(shí)序圖如圖3所示。
當DS18B20響應單片機的復位而發(fā)出存在脈沖時(shí),單片機便知道DS18B20在線(xiàn)上并已準備好。單片機發(fā)送復位脈沖,即拉低總線(xiàn)至少480 μs,然后單片機釋放總線(xiàn)并進(jìn)入接收模式。當DS18B20檢測到復位脈沖后,等待15~60 μs,然后發(fā)送存在脈沖,即拉低總線(xiàn)60~240μs。由于DS18B20的DQ引腳接了一個(gè)上拉電阻,所以,總線(xiàn)的空閑狀態(tài)為高電平,存在脈沖結束后,總線(xiàn)自動(dòng)恢復到高電平狀態(tài)。單片機所要做的就是發(fā)出復位脈沖并檢測DS18B20的存在脈沖,其參考程序如下:
3.2 寫(xiě)時(shí)序
單片機可在寫(xiě)時(shí)隙向DS18B20寫(xiě)入數據,在讀時(shí)隙從DS18B20讀出數據,每個(gè)時(shí)隙總線(xiàn)上只傳送一位數據。寫(xiě)時(shí)隙有“寫(xiě)1”時(shí)隙和“寫(xiě)0”時(shí)隙兩種。單片機通過(guò)寫(xiě)1時(shí)隙向DS18B20寫(xiě)入一個(gè)邏輯1,并通過(guò)寫(xiě)0時(shí)隙向DS18B20寫(xiě)入一個(gè)邏輯0。所有的寫(xiě)時(shí)隙必須至少持續60 μs,并在每個(gè)獨立的寫(xiě)時(shí)隙之間至少有1 μs的恢復時(shí)間。兩種寫(xiě)時(shí)隙都是由單片機拉低總線(xiàn)開(kāi)始的,如圖3所示。
要產(chǎn)生寫(xiě)1時(shí)隙,單片機在拉低總線(xiàn)后必須在15 μs之內釋放總線(xiàn)??偩€(xiàn)被釋放后,上拉電阻將把總線(xiàn)拉高。要產(chǎn)生寫(xiě)0時(shí)隙,單片機在拉低總線(xiàn)后必須繼續保持總線(xiàn)低電平使時(shí)隙至少60μs。DS18B20在時(shí)隙開(kāi)始后15~60 μs之間的時(shí)間段內對總線(xiàn)進(jìn)行采樣,如果總線(xiàn)是高電平,則向DS18B20寫(xiě)入一個(gè)1,如果總線(xiàn)是低電平,則向DS18B20寫(xiě)入一個(gè)0。
下面是向DS18B20寫(xiě)入一個(gè)字節數據的程序代碼:
評論