新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 經(jīng)典數(shù)字溫度傳感器DS18B20試驗

經(jīng)典數(shù)字溫度傳感器DS18B20試驗

作者: 時間:2013-01-15 來源:網(wǎng)絡(luò) 收藏

測溫實驗原理圖見下面圖3

圖3

新建Keil工程ds18sy.UV2,輸入下面的測溫實驗源程序,編譯得到HEX格式目標(biāo)文件ds18sy.hex。

;--------- 下面是測溫實驗源程序 ---------

    ORG  0000H
START: MOV  SP,#60H     ;開機初始化
    MOV  P0,#0FFH
    MOV  P1,#0FEH
    MOV  P2,#0FFH
    MOV  P3,#0FFH

MAIN:  LCALL  GET_TEMPER   ;調(diào)用讀溫度子程序
    LCALL  DISP      ;調(diào)用數(shù)碼管顯示子程序
    AJMP  MAIN      ;重復(fù)循環(huán)

;------ 讀DS18B20傳感器的溫度值 ------
GET_TEMPER:
    SETB  P3.3
    LCALL  RST18B20    ;復(fù)位DS18B20
    JB    00H,DSS2
    RET
DSS2:  MOV   A,#0CCH    ;跳過ROM匹配
    LCALL  WR18B20
    MOV   A,#44H     ;向DS18B20發(fā)出溫度轉(zhuǎn)換命令
    LCALL  WR18B20
    LCALL  RST18B20    ;準(zhǔn)備讀溫度前先復(fù)位DS18B20
    MOV   A,#0CCH    ;跳過ROM匹配
    LCALL  WR18B20
    MOV   A,#0BEH    ;向DS18B20發(fā)出讀溫度命令
    LCALL  WR18B20
    LCALL  RE18B20    ;讀出溫度數(shù)據(jù)
    RET

;------ DS18B20復(fù)位初始化程序 ------
RST18B20:
    SETB  P3.3
    NOP
    CLR   P3.3
    MOV   R0,#06BH    ;主機發(fā)出復(fù)位低脈沖
    MOV   R1,#03H
DSR1:  DJNZ  R0,DSR1
    MOV   R0,#6BH
    DJNZ  R1,DSR1
    SETB  P3.3      ;拉高數(shù)據(jù)線
    NOP
    NOP
    NOP
    MOV   R0,#25H
DSR2:  JNB   P3.3,DSR3    ;等待DS18B20回應(yīng)
    DJNZ  R0,DSR2
    LJMP  DSR4
DSR3:  SETB  00H       ;置標(biāo)志位,表示DS1820存在
    LJMP  DSR5
DSR4:  CLR   00H        ;清標(biāo)志位,表示DS1820不存在
    LJMP  DSR7
DSR5:  MOV   R0,#06BH
DSR6:  DJNZ  R0,DSR6     ;延時一段時間
DSR7:  SETB  P3.3
    RET

;------ 寫DS18B20的子程序 ------
WR18B20:
    MOV   R2,#8
    CLR   C
WR1:  CLR   P3.3
    MOV   R3,#6
    DJNZ  R3,$
    RRC   A
    MOV   P3.3,C
    MOV   R3,#23
    DJNZ  R3,$
    SETB  P3.3
    NOP
    DJNZ  R2,WR1
    SETB  P3.3
    RET



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉