51微控制器之DS18B20

2021-10-03 23:19:47 字數 2919 閱讀 7809

一文讀懂ds18b20溫度感測器及程式設計

對於新手而言, ds18b20基本概念僅做了解,最重要的是利用微控制器對ds18b20進行程式設計,讀取溫度資訊,並把讀取到的溫度資訊利用數碼管,lcd1602或者上位機進行顯示

ds18b20是常用的數字溫度感測器,其輸出的是數碼訊號,具有體積小,硬體開銷低,抗干擾能力強,精度高的特點。 ds18b20數字溫度感測器接線方便,封裝 成後可應用於多種場合,如管道式,螺紋式,磁鐵吸附式,不鏽鋼封裝式,型號多種多樣,有ltm8877,ltm8874等等。

該產品適用於冷凍庫,糧倉,儲罐,電訊機房,電力機房,電纜線槽等測溫和控制領域。軸瓦,缸體,紡機,空調,等狹小空間工業裝置測溫和控制。

汽車空調、冰箱、冷櫃、以及中低溫乾燥箱等。

供熱/製冷管道熱量計量,**空調分戶熱能計量和工業領域測溫和控制。

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、負壓特性:電源極性接反時,晶元不會因發熱而燒毀, 但不能正常工作。

從圖中可以看到ds18b20有三個引腳,其中gnd接地,vcc接電源,dq與微控制器的乙個i/o相連,所以ds18b20採用的是單匯流排方式,只需要一根線連線到微控制器的i/o口即可

ds18b20自帶a/d轉換晶元,所以我們只需要通過51微控制器喚醒ds18b20,設定ds18b20的工作狀態,以及從ds18b20的暫存器中讀出溫度值即可,要注意負溫度以補碼的形式儲存,讀取後要進行碼值的轉換

我們需要構建4個函式

向ds18b20寫入乙個位元組的函式

從ds18b20讀取乙個位元組的函式

ds18b20初始化函式

從ds18b20暫存器讀取溫度的函式,該函式需要呼叫2函式,也就是通訊橋梁

1,2函式相當於微控制器通過i/0口與ds18b20通訊的橋梁,無論是喚醒ds18b20,還是找到ds18b20的位址,亦或是從ds18b20的暫存器讀取a/d轉換後的溫度值都需要這兩個橋梁,橋梁就是通訊的規則,也就是ds18b20器件的時序圖,時序圖可在ds18b20的晶元手冊裡找到

但對於新手而言,可能不懂得時序的操作,但不要喪氣,因為有人已經把時序對應的函式寫好了,我們只需要借用即可,也就是常說的不要重複造輪子

程式設計例項

需特別注意延時函式需要結合自己微控制器的晶振去寫,delay(10us)代表延時10微妙,delay(10ms)代表延時10毫秒

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit dq=p1^0;

//定義ds18b20埠

void

writeonechar

(uchar dat)

;//微控制器向ds18b20寫乙個位元組資料的函式

uchar readonechar

(void);

//微控制器從ds18b20讀乙個位元組資料的函式

bit init_ds18b20

(void);

//ds18b20初始化函式

uint readtemperature

(void);

//從ds18b20讀取溫度函式

**d18b20寫入乙個位元組函式*

*void

writeonechar

(uchar dat)

delay

(50us);}

**ds18b20讀取乙個位元組函式*

*uchar readonechar()

return

(dat);}

**ds18b20初始化函式*

*bit init_ds18b20

(void)*

*ds18b20讀取溫度函式*

*uint readtemperature()

**定時器初始化函式*

*定時器的作用是控制讀取ds18b20溫度的時間間隔

void

init_timer0

(void)*

*定時器中斷函式*

*void

timer0_isr

(void

) interrupt 1

}char displaytemp[10]

;//該陣列存放讀取到的溫度值

bit readtempflag;

//定義乙個讀取ds18b20溫度的標誌

float temperature;

//定義溫度值

void

main()

51微控制器ds18b20

溫度感測器是比較簡單的外設之一,學習51微控制器都會學習ds18b20來學習51的ad轉換。ds18b20是通過iic匯流排來進行通行的,屬於比較簡單的模組之一,這裡貼出ds18b20的驅動程式,呼叫時只要直接讀取對應位址的資料即可。include temp.h void delay1ms uint...

DS18B20與微控制器應用

ds18b20與微控制器應用 2012年01月19日 ds18b20溫度感測器和7個led數碼顯示程式 原創程式,請支援 org 0000h led數碼管採用動態,p0口接八個資料口,p2.0 p2.2採用3 8解碼器控制七個led tx bit p2.3 ds18b20資料口接p2.3 flag ...

51微控制器 DS18B20溫度感測器

我是初學者,僅供參考微笑 include include include typedef unsigned char uint8 typedef unsigned int uint16 sbit dq p3 2 sbit smg3 p1 3 sbit smg2 p1 2 sbit smg1 p1 1...