關於藍橋杯STC15微控制器的18B20程式

2021-07-10 06:55:32 字數 3550 閱讀 5586

ds18b20是一種單匯流排數字溫度感測器,測試溫度範圍-55℃-125℃,具有體積小,硬體開銷低,抗干擾能力強,精度高的特點。單匯流排,意味著沒有時鐘線,只有一根通訊線。單匯流排讀寫資料是靠控制起始時間和取樣時間來完成,所以時序要求很嚴格,這也是ds18b20驅動程式設計的難點。

1.引腳圖

2.ds18b20內部結構圖

主要由2部分組成:64位rom、9位元組暫存器,如圖所示。

(1) 64 位rom。它的內容是64 位序列號,它可以被看作是該ds18b20 的位址序列碼,其作用是使每個ds18b20 都各不相同,這樣就可以實現一根匯流排上掛接多個ds18b20 的目的。

(2) 9位元組暫存器包含:溫度感測器、上限觸發th高溫報警器、下限觸發tl低溫報警器、高速暫存器、8位crc產生器。

3.64位rom結構圖

8位crc:是單匯流排系列器件的編碼,ds18b20定義為28h。 

48位序列號:是乙個唯一的序列號。 

8位系列碼:由crc產生器生產,作為rom中的前56位編碼的校驗碼。

4.9位元組暫存器結構圖

以上是內部9 個位元組的暫存單元(包括eeprom)。 

位元組0~1 是溫度儲存器,用來儲存轉換好的溫度。 

位元組2~3 是使用者用來設定最高報警和最低報警值。這個可以用軟體來實現。 

位元組4 是配置暫存器,用來配置轉換精度,讓它工作在9~12 位。 

位元組5~7 保留位。 

位元組8 crc校驗位。是64位rom中的前56位編碼的校驗碼。由crc發生器產生。

5.溫度暫存器結構圖

溫度暫存器由兩個位元組組成,分為低8位和高8位。一共16位。 

其中,第0位到第3位,儲存的是溫度值的小數部分。 

第4位到第10位儲存的是溫度值的整數部分。 

第11位到第15位為符號位。全0表示是正溫度,全1表示是負溫度。 

**中的數值,如果相應的位為1,表示存在。如果相應的位為0,表示不存在。

6.配置暫存器

精度值: 

9-bit 0.5℃ 

10-bit 0.25℃ 

11-bit 0.125℃ 

12-bit 0.0625℃

7.溫度/資料關係

注意:如果溫度是乙個負溫度,要將讀到的資料減一再取反

1.單匯流排通訊初始化

2.位寫入時序

寫時隙:當主機把資料線從邏輯高電平拉到邏輯低電平的時候,寫時間隙開始。有兩種寫時間隙:寫1的時間隙和寫0時間隙。所有寫時間隙必須最少持續60us,包括兩個寫周期間至少1us的恢復時間。dq引腳上的電平變低後,ds18b20在乙個15us到60us的時間視窗內對dq引腳取樣。如果dq引腳是高電平,就是寫1,如果dq引腳是低電平,就是寫0。主機要生成乙個寫1時間隙,必須把資料線拉到低電平然後釋放,在寫時間隙開始後的15us內允許資料線拉到高電平。主機要生成乙個寫0時間隙,必須把資料線拉到低電平並保持60us。

3.位讀取時序

當主機把匯流排從高電平拉低,並保持至少1us後釋放匯流排;並在15us內讀取從ds18b20輸出的資料。

4.ds18b20的rom操作命令

用途:主要是用於選定在單匯流排上的ds18b20,分為5個命令 

(1).讀出rom,**為33h,用於讀出ds18b20的序列號,即64位雷射rom**。 

(2).匹配rom,**為55h,用於識別(或選中)某一特定的ds18b20進行操作。 

(3).搜尋rom,**為f0h,用於確定匯流排上的節點數以及所有節點的序列號。 

(4).跳過rom,**為cch,當匯流排僅有乙個ds18b20時,不需要匹配 。 

(5).報警搜尋,**為ech,主要用於鑑別和定位系統中超出程式設定的報警溫度界限的節點。

微控制器:stc15

競賽給出的驅動

18b20.c檔案/*

????: ???????

????: keil uvision 4.10 

????: ct107?????????

?    ?: 2011-8-9 */

#include "onewire.h"

//???????

void delay_onewire(unsigned int t)

//ds18b20?????

bit init_ds18b20(void)

//??????ds18b20?????

void write_ds18b20(unsigned char dat)

delay_onewire(5); }

//?ds18b20??????

unsigned char read_ds18b20(void)

delay_onewire(5); }

return dat; }

main.c檔案

#include "onewire.h"

#include "absacc.h"

#define uchar unsigned char 

#define uint unsigned int

code unsigned char duan=; 

code unsigned char  wei=;

uchar dis[4];

uint value;

void delay(unsigned int x)

uint get_temp(void)//溫度是由兩個位元組構成的返回值必須是uint型(ps:關於int型的範圍,由具體的編譯器決定,keil中51系列對應2位元組16位,mdk對應的4位元組32位)

uint temp_change(void)

else

return t; }

void display(void)

} void cls_led()

void cls_buzz(void)

void main(void)

}

微控制器學習筆記 STC15微控制器ADC

將模擬訊號轉換成數碼訊號的電路,我們稱其為模數轉換器,簡稱a d轉換器或adc analog to digital converter 同理,將數碼訊號轉換成模擬訊號的電路稱為數模轉換器,簡稱d a轉換器或dac,微控制器能夠儲存的資料都是數字型別的。一 逼近式adc原理 簡介 在進行轉化時,一般都...

STC15微控制器的EEPROM程式設計

在程式中使用 stc15微控制器是乙個8位的微控制器,據說在世界上銷量最大,是國產的品牌。其中也有許多值得稱道的地方,比如不用晶振,不用外部的儲存器,flash可以做記憶體使用等。可以進入休眠狀態,外部中斷就可以喚醒等。在使用者需要保持資料,當掉電可以儲存這些資料,等下次啟動後繼續使用資料。這個功能...

STC15 微控制器 利用 外部中斷 測頻率

中斷測頻率 先來看張圖 圖中標明 itx 0 時 下降沿觸發中斷 itx 1 時 上公升沿,下降沿均可觸發中斷,這裡要注意不是隨便乙個io口有上公升沿或下降沿時都觸發中斷,比如我的int0 對應的埠是p32 所以 只有p32埠有上公升沿 下降沿時才會觸發外部中斷0。include include t...