?? ds18b20_read_write.txt
字號:
DS18B20的讀寫程序
以下是我為賓館智能控制器所做的溫度探測器DS18B20的一個程序。在網(wǎng)上看到很多朋友想要DS18B20的讀寫程序卻苦于找不到這樣的程序,我把它貢獻出來和大家分享。這個程序取到的溫度值范圍為0-70(一般應(yīng)用足夠了),如需大于此溫度值可自行在TAB中添加。測溫精度為0.5度,沒有加校正,需要的朋友可自行查一些資料。這個程序使用下來沒有什么問題,希望廣大朋友提出寶貴意見,謝謝!
; FLAG1: 標(biāo)志位,為"1"時表示檢測到DS18B20
; DQ: DS18B20的數(shù)據(jù)總線接腳
; TEMPER_NUM:保存讀出的溫度數(shù)據(jù)
; 本程序僅適合單個DS18B20和51單片機的連接,晶振為12MHZ左右
TEMPER_L EQU 36H
TEMPER_H EQU 35H
DQ BIT P1.7
; DS18B20初始化程序
;//*****************************************//
INIT_1820:
SETB DQ
NOP
CLR DQ
MOV R0,#06BH
TSR1:
DJNZ R0,TSR1 ; 延時
SETB DQ
MOV R0,#25H
TSR2:
JNB DQ,TSR3
DJNZ R0,TSR2
LJMP TSR4 ; 延時
TSR3:
SETB FLAG1 ; 置標(biāo)志位,表示DS1820存在
LJMP TSR5
TSR4:
CLR FLAG1 ; 清標(biāo)志位,表示DS1820不存在
LJMP TSR7
TSR5:
MOV R0,#06BH
TSR6:
DJNZ R0,TSR6 ; 延時
TSR7:
SETB DQ
RET
;//*****************************************//
; 重新寫DS18B20暫存存儲器設(shè)定值
;//*****************************************//
RE_CONFIG:
JB FLAG1,RE_CONFIG1 ; 若DS18B20存在,轉(zhuǎn)RE_CONFIG1
RET
RE_CONFIG1:
MOV A,#0CCH ; 發(fā)SKIP ROM命令
LCALL WRITE_1820
MOV A,#4EH ; 發(fā)寫暫存存儲器命令
LCALL WRITE_1820
MOV A,#00H ; TH(報警上限)中寫入00H
LCALL WRITE_1820
MOV A,#00H ; TL(報警下限)中寫入00H
LCALL WRITE_1820
MOV A,#1FH ; 選擇9位溫度分辨率
LCALL WRITE_1820
RET
;//*****************************************//
讀出轉(zhuǎn)換后的溫度值
;//*****************************************//
GET_TEMPER:
SETB DQ ; 定時入口
LCALL INIT_1820
JB FLAG1,TSS2
RET ; 若DS18B20不存在則返回
TSS2:
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_1820
MOV A,#44H ; 發(fā)出溫度轉(zhuǎn)換命令
LCALL WRITE_1820
LCALL INIT_1820
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 發(fā)出讀溫度命令
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -