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...