概述
DS18B20數字溫度感測器接線方便,封裝成後可套用於多種場合,如管道式,螺紋式,磁鐵吸附式,不鏽鋼
封裝式,型號多種多樣,有LTM8877,LTM8874等等。主要根據套用場合的不同而改變其外觀。封裝後的DS18B20可用於電纜溝測溫,高爐水循環測溫,鍋爐測溫,機房測溫,農業大棚測溫,潔淨室測溫,彈藥庫測溫等各種非極限溫度場合。耐磨耐碰,體積小,使用方便,封裝形式多樣,適用於各種狹小空間設備數字測溫和控制領域。
1: 技術性能描述
①、 獨特的單線接口方式,DS18B20在與微處理器連線時僅需要一條口線即可實現微處理器與DS18B20的雙向通訊。
② 、測溫範圍 -55℃~+125℃,固有測溫誤差(注意,不是解析度,這裡之前是錯誤的)1℃。
③、支持多點組網功能,多個DS18B20可以並聯在唯一的三線上,最多只能並聯8個,實現多點測溫,如果數量過多,會使供電電源電壓過低,從而造成信號傳輸的不穩定。
④、工作電源: 3.0~5.5V/DC (可以數據線寄生電源)
⑤ 、在使用中不需要任何外圍元件
⑥、 測量結果以9~12位數字量方式串列傳送
⑦ 、不鏽鋼保護管直徑 Φ6
⑧ 、適用於DN15~25, DN40~DN250各種介質工業管道和狹小空間設備測溫
⑨、 標準安裝螺紋 M10X1, M12X1.5, G1/2”任選
⑩ 、PVC電纜直接出線或德式球型接線盒出線,便於與其它電器設備連線。
DS18B20+ 和 Maxim Integrated 信息
Manufactured by Maxim Integrated, DS18B20+ is a 溫度感測器.
套用範圍
2.1 該產品適用於冷凍庫,糧倉,儲罐,電訊機房,電力機房,電纜線槽等測溫和控制領域
2.2 軸瓦,缸體,紡機,空調,等狹小空間工業設備測溫和控制。
2.3 汽車空調、冰櫃、冷櫃、以及中低溫乾燥箱等。
2.4 供熱/製冷管道熱量計量,中央空調分戶熱能計量和工業領域測溫和控制
型號規格
型 號 測溫範圍 安裝螺紋 電纜長度 適用管道
TS-18B20 -55~125 無 1.5 m
TS-18B20A -55~125 M10X1 1.5m DN15~25
TS-18B20B -55~125 1/2”G 接線盒 DN40~ 60
接線說明
接線方法
面對著扁平的那一面,左負右正,一旦接反就會立刻發熱,有可能燒毀!同時,接反也是導致該感測器總是顯示85℃的原因。
特點
獨特的一線接口,只需要一條口線通信 多點能力,簡化了分散式溫度感測套用 無需外部元件 可用數據匯流排供電,電壓範圍為3.0 V至5.5 V 無需備用電源 測量溫度範圍為-55 ° C至+125 ℃ 。華氏相當於是-67 ° F到257華氏度 -10 ° C至+85 ° C範圍內精度為±0.5 ° C
溫度感測器可程式的解析度為9~12位,溫度轉換為12位數字格式最大值為750毫秒,用戶可定義的非易失性溫度報警設定,套用範圍包括恆溫控制、工業系統、消費電子產品溫度計、或任何熱敏感系統
描述該DS18B20的數字溫度計提供9至12位(可程式設備溫度讀數)。由於DS18B20是一條口線通信,所以中央微處理器與DS18B20隻有一個一條口線連線。為讀寫以及溫度轉換可以從數據線本身獲得能量,不需要外接電源。 因為每一個DS18B20的包含一個獨特的序號,多個ds18b20s可以同時存在於一條匯流排。這使得溫度感測器放置在許多不同的地方。它的用途很多,包括空調環境控制,感測建築物內溫設備或機器,並進行過程監測和控制。
DS18B20採用一線通信接口。因為一線通信接口,必須在先完成ROM設定,否則記憶和控制功能將無法使用。主要首先提供以下功能命令之一: 1 )讀ROM, 2 )ROM匹配, 3 )搜尋ROM, 4 )跳過ROM, 5 )報警檢查。這些指令操作作用在沒有一個器件的64位光刻ROM序列號,可以在掛在一線上多個器件選定某一個器件,同時,匯流排也可以知道匯流排上掛有有多少,什麼樣的設備。
若指令成功地使DS18B20完成溫度測量,數據存儲在DS18B20的存儲器。一個控制功能指揮指示DS18B20的演出測溫。測量結果將被放置在DS18B20記憶體中,並可以讓閱讀發出記憶功能的指揮,閱讀內容的片上存儲器。溫度報警觸發器TH和TL都有一位元組EEPROM 的數據。如果DS18B20不使用報警檢查指令,這些暫存器可作為一般的用戶記憶用途。在片上還載有配置位元組以理想的解決溫度數字轉換。寫TH,TL指令以及配置位元組利用一個記憶功能的指令完成。通過快取器讀暫存器。所有數據的讀,寫都是從最低位開始。
部件描述
存儲器
DS18B20的存儲器包括高速暫存器RAM和可電擦除RAM,可電擦除RAM又包括溫度觸發器TH和TL,以及一個配置暫存器。存儲器能完整的確定一線連線埠的通訊,數字開始用寫暫存器的命令寫進暫存器,接著也可以用讀暫存器的命令來確認這些數字。當確認以後就可以用複製暫存器的命令來將這些數字轉移到可電擦除RAM中。當修改過暫存器中的數時,這個過程能確保數字的完整性。
高速暫存器RAM是由8個位元組的存儲器組成;。用讀暫存器的命令能讀出第九個位元組,這個位元組是對前面的八個位元組進行校驗。存儲器的結構圖如圖4.6所示。
圖4.6 存儲器的結構圖
64-位光刻ROM
64位光刻ROM的前8位是DS18B20的自身代碼,接下來的48位為連續的數字代碼,最後的8位是對前56位的CRC校驗。64-位的光刻ROM又包括5個ROM的功能命令:讀ROM,匹配ROM,跳躍ROM,查找ROM和報警查找。64-位光刻ROM的結構圖如圖4.7所示。
圖4.7為64-位光刻ROM的結構圖
外部電源的連線
DS18B20可以使用外部電源VDD,也可以使用內部的寄生電源。當VDD連線埠接3.0V—5.5V的電壓時是使用外部電源;當VDD連線埠接地時使用了內部的寄生電源。無論是內部寄生電源還是外部供電,I/O口線要接5KΩ左右的上拉電阻。 連線圖如圖4.8、圖4.9所示。
圖4.8 使用寄生電源的連線圖
圖4.9外接電源的連線圖
4.3.4 DS18B20溫度處理過程
配置暫存器
配置暫存器是配置不同的位數來確定溫度和數字的轉化。配置暫存器的結構圖如圖4.10所示。
圖4.10 配置暫存器的結構圖
由圖4.9可以知道R1,R0是溫度的決定位,由R1,R0的不同組合可以配置為9位,10位,11位,12位的溫度顯示。這樣就可以知道不同的溫度轉化位所對應的轉化時間,四種配置的解析度分別為0.5℃,0.25℃,0.125℃和0.0625℃,出廠時以配置為12位。溫度的決定配置圖如圖8所示。
圖4.11 溫度的決定配置圖
溫度的讀取
DS18B20在出廠時以配置為12位,讀取溫度時共讀取16位,前5個位為符號位,當前5位為1時,讀取的溫度為負數;當前5位為0時,讀取的溫度為正數。溫度為正時讀取方法為:將16進制數轉換成10進制即可。溫度為負時讀取方法為:將16進制取反後加1,再轉換成10進制即可。例:0550H = +85 度,FC90H = -55 度。
控制方法
DS18B20有六條控制命令,如表4.1所示:
表4.1 為DS18B20有六條控制命令
指 令 約定代碼 操 作 說 明
溫度轉換 44H 啟動DS18B20進行溫度轉換
讀暫存器 BEH 讀暫存器9位元組二進制數字
寫暫存器 4EH 將數據寫入暫存器的TH、TL位元組
複製暫存器 48H 把暫存器的TH、TL位元組寫到E2PROM中
重新調E2PROM B8H 把E2PROM中的TH、TL位元組寫到暫存器TH、TL位元組
讀電源供電方式 B4H 啟動DS18B20傳送電源供電方式的信號給主CPU
初始化
(1) 先將數據線置高電平“1”。
(2) 延時(該時間要求的不是很嚴格,但是儘可能的短一點)
(3) 數據線拉到低電平“0”。
(4) 延時750微秒(該時間的時間範圍可以從480到960微秒)。
(5) 數據線拉到高電平“1”。
(6) 延時等待(如果初始化成功則在15到60微秒時間之內產生一個由DS18B20所返回的低電平“0”。據該狀態可以來確定它的存在,但是應注意不能無限的進行等待,不然會使程式進入死循環,所以要進行逾時控制)。
(7) 若CPU讀到了數據線上的低電平“0”後,還要做延時,其延時的時間從發出的高電平算起(第(5)步的時間算起)最少要480微秒。
(8) 將數據線再次拉高到高電平“1”後結束。
其時序如圖4.13所示:
圖4.13 初始化時序圖
寫操作
(1) 數據線先置低電平“0”。
(2) 延時確定的時間為15微秒。
(3) 按從低位到高位的順序傳送位元組(一次只傳送一位)。
(4) 延時時間為45微秒。
(5) 將數據線拉到高電平。
(6) 重複上(1)到(6)的操作直到所有的位元組全部傳送完為止。
(7) 最後將數據線拉高。
DS18B20的寫操作時序圖如圖4.14所示。
圖4.14 DS18B20的寫操作時序圖
讀操作
(1)將數據線拉高“1”。
(2)延時2微秒。
(3)將數據線拉低“0”。
(4)延時3微秒。
(5)將數據線拉高“1”。
(6)延時5微秒。
(7)讀數據線的狀態得到1個狀態位,並進行數據處理。
(8)延時60微秒。
DS18B20的讀操作時序圖如圖4.15所示。
圖1.15 DS18B20的讀操作圖
DS18B20介紹
1、DS18B20的主要特性
1.1、適應電壓範圍更寬,電壓範圍:3.0~5.5V,在寄生電源方式下可由數 據線供電
1.2、獨特的單線接口方式,DS18B20在與微處理器連線時僅需要一條口線即可實現微處理器與DS18B20的雙向通訊
1.3、 DS18B20支持多點組網功能,多個DS18B20可以並聯在唯一的三線上,實現組網多點測溫
1.4、DS18B20在使用中不需要任何外圍元件,全部 感測元件及轉換電路集成在形如一隻三極體的積體電路內
1.5、溫範圍-55℃~+125℃,在-10~+85℃時精度為±0.5℃
1.6、可程式 的解析度為9~12位,對應的可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實現高精度測溫
1.7、在9位解析度時最多在 93.75ms內把溫度轉換為數字,12位解析度時最多在750ms內把溫度值轉換為數字,速度更快
1.8、測量結果直接輸出數字溫度信號,以"一 線匯流排"串列傳送給CPU,同時可傳送CRC校驗碼,具有極強的抗干擾糾錯能力
1.9、負壓特性:電源極性接反時,晶片不會因發熱而燒毀, 但不能正常工作。
2、DS18B20的外形和內部結構
DS18B20內部結構主要由四部分組成:64位光刻ROM 、溫度感測器、非揮發的溫度報警觸發器TH和TL、配置暫存器。
DS18B20的外形及管腳排列如下圖1:
DS18B20引腳定義:
(1)DQ為數位訊號輸入/輸出端;
(2)GND為電源地;
(3)VDD為外接供電電源輸入端(在寄生電源接線方式時接地)。
圖2:DS18B20內部結構圖
3、DS18B20工作原理
DS18B20的讀寫時序和測溫原理與DS1820相同,只是得到的溫度值的位數因解析度不同而不同,且溫度轉換時的延時時間由2s 減為750ms。高溫度係數晶振 隨溫度變化其振盪率明顯改變,所產生的信號作為計數器2的脈衝輸入。計數器1和溫度暫存器被預置在-55℃所對應的一個基數值。計數器1對 低溫度係數晶振產生的脈衝信號進行減法計數,當計數器1的預置值減到0時,溫度暫存器的值將加1,計數器1的預置將重新被裝入,計數器1重 新開始對低溫度係數晶振產生的脈衝信號進行計數,如此循環直到計數器2計數到0時,停止溫度暫存器值的累加,此時溫度暫存器中的數值即 為所測溫度。圖3中的斜率累加器用於補償和修正測溫過程中的非線性,其輸出用於修正計數器1的預置值。
圖3:DS18B20測溫原理框圖
DS18B20有4個主要的數據部件:
(1)光刻ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位 (28H)是產品類型標號,接著的48位是該DS18B20自身的序列號,最後8位是前面56位的循環冗餘校驗碼(CRC=X8+X5+X4+1)。光刻ROM的作用 是使每一個DS18B20都各不相同,這樣就可以實現一根匯流排上掛接多個DS18B20的目的。
(2)DS18B20中的溫度感測器可完成對溫度的測量,以12位轉化為例:用16位符號擴展的二進制補碼讀數形式提供,以 0.0625℃/LSB形式表達,其中S為符號位。
表1: DS18B20溫度值格式表
這是12位轉化後得到的12位數據,存儲在18B20的兩個8比特的RAM中,二進制中的前面5位是符號位,如果測得的溫度大於0, 這5位為0,只要將測到的數值乘於0.0625即可得到實際溫度;如果溫度小於0,這5位為1,測到的數值需要取反加1再乘於0.0625即可得到實際 溫度。 例如+125℃的數字輸出為07D0H,+25.0625℃的數字輸出為0191H,-25.0625℃的數字輸出為FE6FH,-55℃的數字輸出為FC90H 。
表2: DS18B20溫度數據表
(3)DS18B20溫度感測器的存儲器 DS18B20溫度感測器的內部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的EEPRAM,後者存放高溫度和低溫度觸發器 TH、TL和結構暫存器。
(4)配置暫存器 該位元組各位的意義如下:
表3:配置暫存器結構
TM | R1 | R0 | 1 | 1 | 1 | 1 | 1 |
低五位一直都是"1",TM是測試模式位,用於設定DS18B20在工作模式還是在測試模式。在DS18B20齣廠時該位被設定為0,用 戶不要去改動。R1和R0用來設定解析度,如下表所示:(DS18B20齣廠時被設定為12位)
表4:溫度解析度設定表
R1 | R0 | 解析度 | 溫度最大轉換時間 |
0 | 0 | 9位 | 93.75ms |
0 | 1 | 10位 | 187.5ms |
1 | 0 | 11位 | 375ms |
1 | 1 | 12位 | 750ms |
4、高速暫存存儲器高速暫存存儲器由9個位元組組成,其分配如表5所示。當溫度轉換命令發布後,經轉換所得的溫度值以二位元組補碼形式存放在 高速暫存存儲器的第0和第1個位元組。單片機可通過單線接口讀到該數據,讀取時低位在前,高位在後,數據格式如表1所示。對應的溫度計算: 當符號位S=0時,直接將二進制位轉換為十進制;當S=1時,先將補碼變為原碼,再計算十進制值。表 2是對應的一部分溫度值。第九個位元組是 冗餘檢驗位元組。
表5:DS18B20暫存暫存器分布
暫存器內容 | 位元組地址 |
溫度值低位 (LS Byte) | 0 |
溫度值高位 (MS Byte) | 1 |
高溫限值(TH) | 2 |
低溫限值(TL) | 3 |
配置暫存器 | 4 |
保留 | 5 |
保留 | 6 |
保留 | 7 |
CRC校驗值 | 8 |
根據DS18B20的通訊協定,主機(單片機)控制DS18B20完成溫度轉換必須經過三個步驟:每一次讀寫之前都要對DS18B20進行 復位操作,復位成功後傳送一條ROM指令,最後傳送RAM指令,這樣才能對DS18B20進行預定的操作。復位要求主CPU將數據線下拉500微秒,然後 釋放,當DS18B20收到信號後等待16~60微秒左右,後發出60~240微秒的存在低脈衝,主CPU收到此信號表示復位成功。
表6:ROM指令表
指 令 | 約定代碼 | 功 能 |
讀ROM | 33H | 讀DS1820溫度感測器ROM中的編碼(即64位地址) |
符合 ROM | 55H | 發出此命令之後,接著發出 64 位 ROM 編碼,訪問單匯流排上與該編碼相對應的 DS1820 使之作出回響,為下一步對該 DS1820 的讀寫作準備。 |
搜尋 ROM | 0FOH | 用於確定掛接在同一匯流排上 DS1820 的個數和識別 64 位 ROM 地址。為操作各器件作好準備。 |
跳過 ROM | 0CCH | 忽略 64 位 ROM 地址,直接向 DS1820 發溫度變換命令。適用於單片工作。 |
告警搜尋命令 | 0ECH | 執行後只有溫度超過設定值上限或下限的片子才做出回響。 |
表6:RAM指令表
指 令 | 約定代碼 | 功 能 |
溫度變換 | 44H | 啟動DS1820進行溫度轉換,12位轉換時最長為750ms(9位為93.75ms)。結果存入內部9位元組RAM中。 |
讀暫存器 | 0BEH | 讀內部RAM中9位元組的內容 |
寫暫存器 | 4EH | 發出向內部RAM的3、4位元組寫上、下限溫度數據命令,緊跟該命令之後,是傳送兩位元組的數據。 |
複製暫存器 | 48H | 將RAM中第3 、4位元組的內容複製到EEPROM中。 |
重調 EEPROM | 0B8H | 將EEPROM中內容恢復到RAM中的第2、3位元組。 |
讀供電方式 | 0B4H | 讀DS1820的供電模式。寄生供電時DS1820傳送“ 0 ”,外接電源供電 DS1820傳送“ 1 ”。 |
5、DS18B20的套用電路DS18B20測溫系統具有測溫系統簡單、測溫精度高、連線方便、占用口線少等優點。下面就是DS18B20幾個不同套用方式下的 測溫電路圖:
5.1、DS18B20寄生電源供電方式電路圖如下面圖4所示,在寄生電源供電方式下,DS18B20從單線信號線上汲取能量:在信號線DQ處於高電平期間把能量儲存在內部 電容里,在信號線處於低電平期間消耗電容上的電能工作,直到高電平到來再給寄生電源(電容)充電。
獨特的寄生電源方式有三個好處:
1)進行遠距離測溫時,無需本地電源
2)可以在沒有常規電源的條件下讀取ROM
3)電路更加簡潔,僅用一根I/O口實現測溫
要想使DS18B20進行精確的溫度轉換,I/O線必須保證在溫度轉換期間提供足夠的能量,由 於每個DS18B20在溫度轉換期間工作電流達到1mA,當幾個溫度感測器掛在同一根I/O線上進行多點測溫時,只靠4.7K上拉電阻就無法提供足夠的 能量,會造成無法轉換溫度或溫度誤差極大。
因此,圖4電路只適應於單一溫度感測器測溫情況下使用,不適宜採用電池供電系統中。並 且工作電源VCC必須保證在5V,當電源電壓下降時,寄生電源能夠汲取的能量也降低,會使溫度誤差變大。
5.2、DS18B20寄生電源強上拉供電方式電路圖改進的寄生電源供電方式如下面圖5所示,為了使DS18B20在動態轉換周期中獲得足夠的電流供應,當進行溫度轉換或拷貝到 E2存儲器操作時,用MOSFET把I/O線直接拉到VCC就可提供足夠的電流,在發出任何涉及到拷貝到E2存儲器或啟動溫度轉換的指令後,必須在最 多10μS內把I/O線轉換到強上拉狀態。在強上拉方式下可以解決電流供應不走的問題,因此也適合於多點測溫套用,缺 點就是要多占用一根I/O口線進行強上拉切換。
圖5
注意:在圖4和圖5寄生電源供電方式中,DS18B20的VDD引腳必須接地
5.3、DS18B20的外部電源供電方式
在外部電源供電方式下,DS18B20工作電源由VDD引腳接入,此時I/O線不需要強上拉,不存在電源電流不足的問題,可以保證 轉換精度,同時在匯流排上理論可以掛接任意多個DS18B20感測器,組成多點測溫系統。注意:在外部供電的方式下,DS18B20的GND引腳不能懸空 ,否則不能轉換溫度,讀取的溫度總是85℃。
圖6:外部供電方式單點測溫電路
圖7:外部供電方式的多點測溫電路圖
外部電源供電方式是DS18B20最佳的工作方式,工作穩定可靠,抗干擾能力強,而且電路也比較簡單,可以開發出穩定可靠的多點溫度 監控系統。站長推薦大家在開發中使用外部電源供電方式,畢竟比寄生電源方式只多接一根VCC引線。在外接電源方式下, 可以充分發揮DS18B20寬電源電壓範圍的優點,即使電源電壓VCC降到3V時,依然能夠保證溫度量精度。
6、DS1820使用中注意事項
DS1820雖然具有測溫系統簡單、測溫精度高、連線方便、占用口線少等優點,但在實際套用中也應注意以下幾方面的問題:
6.1、較小的硬體開銷需要相對複雜的軟體進行補償,由於DS1820與微處理器間採用串列數據傳送,因此 ,在對DS1820進行讀寫編程時,必須嚴格的保證讀寫時序,否則將無法讀取測溫結果。在使用PL/M、C等高級語言進行系統程式設計時,對 DS1820操作部分最好採用彙編語言實現。
6.2、在DS1820的有關資料中均未提及單匯流排上所掛DS1820數量問題,容易使人誤認為可以掛任意多個 DS1820,在實際套用中並非如此。當單匯流排上所掛DS1820超過8個時,就需要解決微處理器的匯流排驅動問題,這一點在進行多點測溫系統設計時 要加以注意。
6.3、連線DS1820的匯流排電纜是有長度限制的。試驗中,當採用普通信號電纜傳輸長度超過50m時,讀取的 測溫數據將發生錯誤。當將匯流排電纜改為雙絞線帶禁止電纜時,正常通訊距離可達150m,當採用每米絞合次數更多的雙絞線帶禁止電纜時,正 常通訊距離進一步加長。這種情況主要是由匯流排分布電容使信號波形產生畸變造成的。因此,在用DS1820進行長距離測溫系統設計時要充分考 慮匯流排分布電容和阻抗匹配問題。
6.4、在DS1820測溫程式設計中,向DS1820發出溫度轉換命令後,程式總要等待DS1820的返回信號,一旦 某個DS1820接觸不好或斷線,當程式讀該DS1820時,將沒有返回信號,程式進入死循環。這一點在進行DS1820硬體連線和軟體設計時也要給予 一定的重視。 測溫電纜線建議採用禁止4芯雙絞線,其中一對線接地線與信號線,另一組接VCC和地線,禁止層在源端單點接地。
套用舉例
利用DS18B20構成的數字溫度計
用一片DS18B20構成測溫系統,測量的溫度精度達到0.1度,測量的溫度的範圍在-20度到+100度之間,用8位 數碼管顯示出來
讀取溫度程式代碼段
#include"reg51.h"
#include"d1820.h"
int t;
uint num;
uchar dat; //讀寫數據變數
uchar a=0;
uchar b=0;
float tep=0; //讀一個溫度時的溫度轉換中間間
uchar data tempbuf=0;//溫度字型顯示中間變數
/******************************************************
函式名稱:delay(uint num)
返回值:無
參數:uint num 顏色數據值
作用:延時
*******************************************************/
void delay(uint num)
{
while(num--);
}
/******************************************************
函式名稱:void Init_DS18B20(void)
返回值:無
參數:無
作用:初始化18B20
*******************************************************/
void Init_DS18B20(void)
{
char x=0;
DQ=1;
delay(10);//稍作延時
DQ=0;
delay(80);//延時>480us 540us
DQ=1; //拉高匯流排 15-60us
delay(20);
x=DQ;//讀匯流排狀態 為0復位成功,為1則不成功
delay(30);
DQ=1;//釋放匯流排
}
/******************************************************
函式名稱:uchar ReadOneChar(void)
返回值:uchar dat
參數: 無
作用:讀1820一個位元組
*******************************************************/
uchar ReadOneChar(void)
{
uchar i;
uchar dat=0;
for(i=0;i<8;i++)
{
DQ=0;
dat>>=1;
DQ=1;//給脈衝
if(DQ) {dat|=0x80;}//讀1 /// 讀0右移處理
delay(8);//15us內讀完一個數
}
return(dat);
}
/******************************************************
函式名稱:void WriteOneChar(uchar dat)
返回值:無
參數: uchar dat
作用:寫1820一個位元組
*******************************************************/
/////****寫DS18B20***///寫0 60us讀完,寫1 30us 內讀完
void WriteOneChar(uchar dat)
{
uchar i=0;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;//寫所給數據最低位
delay(10); ///////////
DQ=1;//給脈衝
dat>>=1;
}
delay(8);
}
/******************************************************
函式名稱:int ReadOneTemperature(void)
返回值:int t
參數: 無
作用:讀溫度值
*******************************************************/
int ReadOneTemperature(void) ////////***讀取溫度值***********///// 每次讀寫均要先復位
{
Init_DS18B20();
WriteOneChar(0xcc);//發跳過ROM命令
WriteOneChar(0x44);//發讀開始轉換命令
Init_DS18B20();
WriteOneChar(0xcc);//發跳過ROM命令
WriteOneChar(0xbe);//讀暫存器,共九位元組,前兩位元組為轉換值
a=ReadOneChar(); //a存低位元組
b=ReadOneChar(); //b存高位元組
t=b;
t<<=8;//高位元組轉換為10進制
t=t|a;
tep=t*0.0625;//轉換精度為0.0625/LSB
t=tep*10+0.5;//保留1位小數並四捨五入****後面除10還原正確溫度值)
return(t);
}
/******************************************************
函式名稱:uint Temperaturepro(void)
返回值:void
參數: void
作用:溫度處理
*******************************************************/
void Temperaturepro(void)
{
int temp;
temp=ReadOneTemperature();
tempbuf=temp/1000; //百位
tempbuf=temp/100%10;//十位
tempbuf=temp%100/10; //個位
tempbuf=temp%10; //小數
}