51微控制器 DS18B20溫度感測器

2021-07-25 02:40:30 字數 1753 閱讀 6849

/*

我是初學者,僅供參考微笑

*/#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;sbit smg0=p1^0;

sbit smg4=p1^4;

typedef char int8;

typedef int int16;

#define nops(); //定義空指令

//巨集定義乙個nops(乙個nops相當於4個機器週期(4個nop())

uint8 shuma[4]; uint8 fh=0;

code uint16 sum=;

void refresh() //顯示函式

}void delay(uint16 n)

/*void delay_ms(uint16 n)

*//*

* 18b20復位函式

微控制器t0時刻傳送一復位脈衝(最短為480us的低電平訊號),

接著在tl時刻釋放匯流排並進入接收狀態,ds18b20 在檢測到匯流排的上公升沿之後,

等待15-60us,接著ds18b20在t2時刻發出存在脈衝(低電平持續60-240us),如圖中虛線所示。

換句話說如果t2~t3之間訊號電平如果為低,則說明ds18b20復位成功;否則失敗。

*/void t18b20_reset()

delay(45);

flag=~dq;

} dq=1;}/*

* 18b20寫1個位元組函式

* 向1-wire匯流排上寫乙個位元組

當微控制器將匯流排t0時刻從高拉至低電平時,就產生寫時間隙。

見上圖,從t0時刻開始 15us之內應將所需寫的位送到匯流排上。

ds18b20在t0後15-60us間對匯流排取樣,若低電平寫入的位是0;若高電平,寫入的位是1。

連續寫2位間的間隙應大於1us。

*/ void write_byte(uint8 dat)

dq=1;

delay(1);

}/** 18b20讀1個位元組函式

* 從1-wire匯流排上讀取乙個位元組

當微控制器將匯流排t0時刻從高拉至低電平時,匯流排只須保持低電平4us之後,

在t1時刻將匯流排拉高,產生讀時間隙,讀時間在t1時刻後t2時刻前有效,t2距t0為15us,

也就是說,t2時刻前主機必須完成讀位 並在t0後的60us~120us內釋放匯流排。

*/uint8 read_byte()

dq=1;

return(value);}/*

* 啟動溫度轉換

三個步驟:1、復位ds18b20

2、發出skip rom命令(cch)

3、發出convert t命令(44h)

讀取溫度五個步驟 :1、復位ds18b20

2、發出skip rom命令(cch)

3、發出read命令(beh)

4、讀兩位元組的溫度

5、溫度格式轉換

*/void start_temp_sensor()

uint16 read_temp()

/** *

* 數值轉換

*/void convert()

void main()

}

51微控制器ds18b20

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

51微控制器之DS18B20

一文讀懂ds18b20溫度感測器及程式設計 對於新手而言,ds18b20基本概念僅做了解,最重要的是利用微控制器對ds18b20進行程式設計,讀取溫度資訊,並把讀取到的溫度資訊利用數碼管,lcd1602或者上位機進行顯示 ds18b20是常用的數字溫度感測器,其輸出的是數碼訊號,具有體積小,硬體開銷...

51微控制器 溫度感測器DS18B20

溫度感測器是各種感測器中最常用的一種,早期使用的是模擬溫度感測器,如熱敏電阻,隨著環境溫度的變化,它的阻值也發生線性變化,用處理器採集電阻兩端的電壓,然後根據某個公式就可以計算出當前環境溫度。美國dallas半導體公司推出的數位化溫度感測器ds18b20採用單匯流排協議,即與微控制器介面僅需占用乙個...