複製鏈接
請複製以下鏈接發送給好友

DS18B20

鎖定
DS18B20是常用的數字温度傳感器,其輸出的是數字信號,具有體積小,硬件開銷低,抗干擾能力強,精度高的特點。 [1]  DS18B20數字温度傳感器接線方便,封裝成後可應用於多種場合,如管道式,螺紋式,磁鐵吸附式,不鏽鋼封裝式,型號多種多樣,有LTM8877,LTM8874等等。
主要根據應用場合的不同而改變其外觀。封裝後的DS18B20可用於電纜溝測温,高爐水循環測温,鍋爐測温,機房測温,農業大棚測温,潔淨室測温,彈藥庫測温等各種非極限温度場合。耐磨耐碰,體積小,使用方便,封裝形式多樣,適用於各種狹小空間設備數字測温和控制領域。
中文名
數字温度傳感器
外文名
DS18B20
體    積
硬件開銷
抗干擾能力
工作電壓
3V~5.5V
超低功耗
靜態功耗
常見封裝
TO-92、SOP8和DIP8
採集模塊
LCT2662M,RS485總線

DS18B20工作原理

圖3 圖3
DS18B20的讀寫時序和測温原理與DS1820相同,只是得到的温度值的位數因分辨率不同而不同,且温度轉換時的延時時間由2s減為750ms。 DS18B20測温原理如圖3所示。圖中低温度係數晶振的振盪頻率受温度影響很小,用於產生固定頻率的脈衝信號發送給計數器1。高温度係數晶振隨温度變化其振盪頻率明顯改變,所產生的信號作為計數器2的脈衝輸入。計數器1和温度寄存器被預置在-55℃所對應的一個基數值。計數器1對低温度係數晶振產生的脈衝信號進行減法計數,當計數器1的預置值減到0時,温度寄存器的值將加1,計數器1的預置將重新被裝入,計數器1重新開始對低温度係數晶振產生的脈衝信號進行計數,如此循環直到計數器2計數到0時,停止温度寄存器值的累加,此時温度寄存器中的數值即為所測温度。斜率累加器用於補償和修正測温過程中的非線性,其輸出用於修正計數器1的預置值。 [2] 

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 信息 [1] 
Manufactured by Maxim Integrated, DS18B20+ is a 温度傳感器.

DS18B20應用範圍

該產品適用於冷凍庫,糧倉,儲罐,電訊機房,電力機房,電纜線槽等測温和控制領域。
軸瓦,缸體,紡機,空調,等狹小空間工業設備測温和控制。
汽車空調、冰箱、冷櫃、以及中低温乾燥箱等。
供熱/製冷管道熱量計量,中央空調分户熱能計量和工業領域測温和控制。

DS18B20型號規格

型 號 測温範圍 安裝螺紋 電纜長度 適用管道
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

DS18B20接線説明

DS18B20接線方法

面對着平的那一面,左負右正,一旦接反就會立刻發熱,有可能燒燬!同時,接反也是導致該傳感器總是顯示85℃的原因。實際操作中將正負反接,傳感器立即發熱,液晶屏不能顯示讀數,正負接好後顯示85℃。另外,如果使用51單片機的話,那麼中間那個引腳必須接上4.7K—10K的上拉電阻,否則,由於高電平不能正常輸入/輸出,要麼通電後立即顯示85℃,要麼用幾個月後温度在85℃與正常值上亂跳。

DS18B20特點

獨特的一線接口,只需要一條口線通信 多點能力,簡化了分佈式温度傳感應用 無需外部元件 可用數據總線供電,電壓範圍為3.0 V至5.5 V 無需備用電源 測量温度範圍為-55 ° C至+125 ℃ 。華氏相當於是-67 ° F到257° F。在攝氏度-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部件描述

存儲器
DS18B20的存儲器包括高速暫存器RAM和可電擦除RAM,可電擦除RAM又包括温度觸發器TH和TL,以及一個配置寄存器。存儲器能完整的確定一線端口的通訊,數字開始用寫寄存器的命令寫進寄存器,接着也可以用讀寄存器的命令來確認這些數字。當確認以後就可以用複製寄存器的命令來將這些數字轉移到可電擦除RAM中。當修改過寄存器中的數時,這個過程能確保數字的完整性。
高速暫存器RAM是由8個字節的存儲器組成;。用讀寄存器的命令能讀出第九個字節,這個字節是對前面的八個字節進行校驗。。
64-位光刻ROM
64位光刻ROM的前8位是DS18B20的自身代碼,接下來的48位為連續的數字代碼,最後的8位是對前56位的CRC校驗。64-位的光刻ROM又包括5個ROM的功能命令:讀ROM,匹配ROM,跳躍ROM,查找ROM和報警查找。
外部電源的連接
DS18B20可以使用外部電源VDD,也可以使用內部的寄生電源。當VDD端口接3.0V—5.5V的電壓時是使用外部電源;當VDD端口接地時使用了內部的寄生電源。無論是內部寄生電源還是外部供電,I/O口線要接5KΩ左右的上拉電阻。
配置寄存器
配置寄存器是配置不同的位數來確定温度和數字的轉化。
可以知道R1,R0是温度的決定位,由R1,R0的不同組合可以配置為9位,10位,11位,12位的温度顯示。這樣就可以知道不同的温度轉化位所對應的轉化時間,四種配置的分辨率分別為0.5℃,0.25℃,0.125℃和0.0625℃,出廠時以配置為12位。
温度的讀取
DS18B20在出廠時以配置為12位,讀取温度時共讀取16位,前5個位為符號位,當前5位為1時,讀取的温度為負數;當前5位為0時,讀取的温度為正數。温度為正時讀取方法為:將16進制數轉換成10進制即可。温度為負時讀取方法為:將16進製取反後加1,再轉換成10進制即可。例:0550H = +85 度,FC90H = -55 度。

DS18B20控制方法

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

DS18B20初始化

(1) 先將數據線置高電平“1”。
(2) 延時(該時間要求的不是很嚴格,但是儘可能的短一點)
(3) 數據線拉到低電平“0”。
(4) 延時750微秒(該時間的時間範圍可以從480到960微秒)。
(5) 數據線拉到高電平“1”。
(6) 延時等待(如果初始化成功則在15到60微秒時間之內產生一個由DS18B20所返回的低電平“0”。據該狀態可以來確定它的存在,但是應注意不能無限的進行等待,不然會使程序進入死循環,所以要進行超時控制)。
(7) 若CPU讀到了數據線上的低電平“0”後,還要做延時,其延時的時間從發出的高電平算起(第(5)步的時間算起)最少要480微秒。
(8) 將數據線再次拉高到高電平“1”後結束。

DS18B20寫操作

(1) 數據線先置低電平“0”。
(2) 延時確定的時間為15微秒。
(3) 按從低位到高位的順序發送字節(一次只發送一位)。
(4) 延時時間為45微秒。
(5) 將數據線拉到高電平。
(6) 重複上(1)到(6)的操作直到所有的字節全部發送完為止。
(7) 最後將數據線拉高。

DS18B20讀操作

(1)將數據線拉高“1”。
(2)延時2微秒。
(3)將數據線拉低“0”。
(4)延時3微秒。
(5)將數據線拉高“1”。
(6)延時5微秒。
(7)讀數據線的狀態得到1個狀態位,並進行數據處理。
(8)延時60微秒。

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的外形及管腳排列如下:
DS18B20的外形及管腳排列 DS18B20的外形及管腳排列
DS18B20引腳定義:
(1)DQ為數字信號輸入/輸出端;
(2)GND為電源地;
(3)VDD為外接供電電源輸入端(在寄生電源接線方式時接地)。
圖2:DS18B20內部結構圖 圖2:DS18B20內部結構圖
3、DS18B20工作原理
圖3:DS18B20測温原理框圖 圖3:DS18B20測温原理框圖
DS18B20的讀寫時序和測温原理與DS1820相同,只是得到的温度值的位數因分辨率不同而不同,且温度轉換時的延時時間由2s 減為750ms。高温度係數晶振 隨温度變化其振盪率明顯改變,所產生的信號作為計數器2的脈衝輸入。計數器1和温度寄存器被預置在-55℃所對應的一個基數值。計數器1對 低温度係數晶振產生的脈衝信號進行減法計數,當計數器1的預置值減到0時,温度寄存器的值將加1,計數器1的預置將重新被裝入,計數器1重 新開始對低温度係數晶振產生的脈衝信號進行計數,如此循環直到計數器2計數到0時,停止温度寄存器值的累加,此時温度寄存器中的數值即 為所測温度。圖3中的斜率累加器用於補償和修正測温過程中的非線性,其輸出用於修正計數器1的預置值。
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温度值格式表 表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温度數據表 表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
FOH
用於確定掛接在同一總線上 DS1820 的個數和識別 64 位 ROM 地址。為操作各器件作好準備。
跳過 ROM
CCH
忽略 64 位 ROM 地址,直接向 DS1820 發温度變換命令。適用於單片工作。
告警搜索命令
ECH
執行後只有温度超過設定值上限或下限的片子才做出響應。
表6:RAM指令表
指 令
約定代碼
功 能
温度變換
44H
啓動DS1820進行温度轉換,12位轉換時最長為750ms(9位為93.75ms)。結果存入內部第0、1字節RAM中。
讀暫存器
BEH
連續讀取內部RAM中9個字節的內容
寫暫存器
4EH
發出向內部RAM的第2、3和4字節寫上、下限温度數據命令,緊跟該命令之後,是傳送三字節的數據。
備份設置
48H
將RAM中第2、3和4字節字節的內容複製到EEPROM中。
恢復設置
B8H
將EEPROM中內容恢復到RAM中的第2、3和4字節。
讀供電方式
B4H
讀DS1820的供電模式。寄生供電時DS1820發送“ 0 ”,外接電源供電 DS1820發送“ 1 ”。
5、DS18B20的應用電路DS18B20測温系統具有測温系統簡單、測温精度高、連接方便、佔用口線少等優點。下面就是DS18B20幾個不同應用方式下的 測温電路圖:
圖4 圖4
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 圖5
5.2、DS18B20寄生電源強上拉供電方式電路圖改進的寄生電源供電方式如圖5所示,為了使DS18B20在動態轉換週期中獲得足夠的電流供應,當進行温度轉換或拷貝到 E2存儲器操作時,用MOSFET把I/O線直接拉到VCC就可提供足夠的電流,在發出任何涉及到拷貝到E2存儲器或啓動温度轉換的指令後,必須在最 多10μS內把I/O線轉換到強上拉狀態。在強上拉方式下可以解決電流供應不走的問題,因此也適合於多點測温應用,缺 點就是要多佔用一根I/O口線進行強上拉切換。
注意:在圖4和圖5寄生電源供電方式中,DS18B20的VDD引腳必須接地
5.3、DS18B20的外部電源供電方式
圖6:外部供電方式單點測温電路. 圖6:外部供電方式單點測温電路.
在外部電源供電方式下,DS18B20工作電源由VDD引腳接入,此時I/O線不需要強上拉,不存在電源電流不足的問題,可以保證 轉換精度,同時在總線上理論可以掛接任意多個DS18B20傳感器,組成多點測温系統。注意:在外部供電的方式下,DS18B20的GND引腳不能懸空 ,否則不能轉換温度,讀取的温度總是85℃。
圖7:外部供電方式的多點測温電路圖 圖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構成的數字温度計
利用DS18B20構成的數字温度計 利用DS18B20構成的數字温度計
用一片DS18B20構成測温系統,測量的温度精度達到0.1度,測量的温度的範圍在-20度到+100度之間,用8位數碼管顯示出來
讀取温度程序代碼段
#include"reg51.h"

#include"d1820.h"

#define uint unsigned int

#define uchar unsigned char

int t;

uint num;

uchar dat; //讀寫數據變量

uchar a=0;

uchar b=0;

float tep=0; //讀一個温度時的温度轉換中間間

uchar data tempbuf[4]=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[3]=temp/1000;//百位
tempbuf[2]=temp/100%10;//十位
tempbuf[1]=temp%100/10; //個位
tempbuf[0]=temp%10; //小數
}
參考資料