新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 18b20程序及應用

        18b20程序及應用

        作者: 時間:2011-07-29 來源:網絡 收藏

        指令 說明

        本文引用地址:http://www.104case.com/article/150417.htm

        DJNZ R7,LOOP0
        RET
        TAB:DB 0C0H,0F9H,0A4H,0B0H
        DB 99H, 92H, 82H, 0F8H
        DB 80H, 90H, 88H, 83H
        DB 0C6H,0A1H,86H, 8EH
        DB 0FFH
        END

        溫度轉換(44H) 啟動在線ds18B20做溫度AD轉換
        讀數據(BEH) 從高速暫存器讀9位溫度值和CRC值
        寫數據(4EH) 將數據寫入高速暫存的第3和第4字節中
        復制(48H) 將高速暫存器中第3和第4字節復制到EERAM
        讀EERAM(B8H) 將EERAM內容寫入高速暫存器中第3和第4字節
        讀電源供電方式(B4H) 了解18B20的供電方式

        WENDU_L EQU 29H;用于保存讀出溫度的低字節
        WENDU_H EQU 28H;用于保存讀出溫度的高字節
        XIAOSHU EQU 27H;用于保存溫度的小數部分
        ZHENGSHU EQU 26H;用于保存整數部分
        BIAOZHI BIT 50H;18B20檢查位1為存在,0為不存在
        ORG 0000H
        AJMP MAIN
        ORG 0030H
        MAIN:MOV SCON,#00H
        ACALL DUWEN
        ACALL ZHENGHE
        ACALL BCD
        ACALL DISP
        ACALL TIME1
        AJMP MAIN
        ;----------------------------------------------------------------------------------------------------------------------------------------
        ;讀溫度子
        ;----------------------------------------------------------------------------------------------------------------------------------------
        DUWEN:SETB P2.0
        ACALL FUWEI ;讀溫度之前必須先復位
        JB BIAOZHI,CUNZAI;查看標志位看18B20是否存在,1為存在,0為不存在
        RET ;不存在則返回
        CUNZAI: ;存在則開始讀溫度
        MOV A,#0CCH ;跳過ROM匹配
        ACALL XIE ;調寫子
        MOV A,#44H ;發出溫度轉換命令
        ACALL XIE ;調寫子程序
        ACALL TIME1 ;調1秒延時,等等AD轉換完成,現在分辨率為12位,溫度最大轉換時間為750MS
        ACALL FUWEI ;讀溫前需要復位
        MOV A,#0CCH ;跳過ROM匹配
        ACALL XIE
        MOV A,#0BEH ;發讀溫度命令
        ACALL XIE
        ACALL DUSHU ;將闈出數據讀回
        CLR P1.2
        RET
        ;------------------------------------------------------------------------------------------------------------------------------
        ;復位子程序
        ;18B20復位需要將數據位拉低500us
        ;18B20收到信號后要等待16-60us,然后發出60-240us的低脈沖
        ;-------------------------------------------------------------------------------------------------------------------------------
        FUWEI:SETB P2.0
        NOP
        CLR P2.0
        MOV R0,#3
        INTE:MOV R1,#107 ;設一個537us延時
        KK1: DJNZ R1,KK1
        DJNZ R0,INTE
        SETB P2.0 ;拉高數據線,等待回應
        NOP
        NOP
        NOP
        MOV R0,#25 ;
        INTE1:JNB P2.0,INTE2 ;延時延時50us等待18B20回應,若返回低脈沖則說明18B20存在
        DJNZ R0 ,INTE1
        AJMP INTE3 ;經過反應時間而沒檢測到18B20的存在,則跳轉去清零標志位
        INTE2:SETB BIAOZHI ;檢測到18B20存在,置1標志位
        CLR P1.0
        AJMP INTE4
        INTE3:CLR BIAOZHI ;沒檢測到18B20,清零標志位
        AJMP INTE5
        INTE4:MOV R0,#120 ;延時240us,確定回應信號已發完
        KK: DJNZ R0,KK
        INTE5:SETB P2.0
        RET


        ;----------------------------------------------------------------------------------------------------------------------------------------
        ;寫18B20子程序
        ;-----------------------------------------------------------------------------------------------------------------------------------------
        XIE:MOV R2,#8 ;寫計數寄存器,一共有8位數據
        CLR C
        LP:CLR P2.0
        MOV R3,#6 ;設一個延時
        LL1:DJNZ R3,LL1
        RRC A ;右循環,先輸出低位
        MOV P2.0,C
        MOV R3,#23 ;設延時
        LL: DJNZ R3,LL ;
        SETB P2.0
        NOP
        NOP
        DJNZ R2,LP ;判斷是否完成數據傳送
        SETB P2.0 ;完成傳送拉高數據位
        RET
        ;-----------------------------------------------------------------------------------------------------------------------------------------
        ;從18B20中讀出溫度數據子程序
        ;-----------------------------------------------------------------------------------------------------------------------------------------

        DUSHU:MOV R4,#2 ;設讀回數據個數指針
        MOV R1,#WENDU_L ;把溫度數據低位存入29H
        RE: MOV R2,#8 ;設數據長度指針
        RE1: CLR C
        SETB P2.0
        NOP
        NOP
        CLR P2.0
        NOP
        NOP
        NOP
        SETB P2.0
        MOV R3,#9
        DJNZ R3,$
        MOV C,P2.0
        MOV R3,#23
        NN: DJNZ R3,NN
        RRC A
        DJNZ R2,RE1
        MOV @R1,A
        DEC R1 ;高位存入28H
        DJNZ R4,RE
        RET



        關鍵詞: 應用 程序 18b20

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 韶关市| 通州区| 郧西县| 兴海县| 黑水县| 敖汉旗| 大田县| 定结县| 酉阳| 清水县| 开鲁县| 兴隆县| 通河县| 清徐县| 曲阳县| 聂拉木县| 武隆县| 胶州市| 武强县| 石渠县| 铜山县| 惠水县| 安远县| 剑川县| 潮州市| 合阳县| 南通市| 新田县| 兴仁县| 焉耆| 乃东县| 晋江市| 灵宝市| 桐梓县| 青海省| 格尔木市| 新疆| 长沙市| 湖南省| 南漳县| 乌拉特前旗|