新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機實驗板DS18B20測溫程序

        51單片機實驗板DS18B20測溫程序

        作者: 時間:2012-12-05 來源:網絡 收藏

        ;-------------------------------------------------
        ;寫的子程序(有具體的時序要求)
        WRITE_1820:MOV R2,#8 ;一共8位數據
        CLR C
        WR1:CLR DQ
        MOV R3,#6
        DJNZ R3,$
        RRC A
        MOV DQ,C
        MOV R3,#23
        DJNZ R3,$
        SETB DQ
        NOP
        DJNZ R2,WR1
        SETB DQ
        RET

        ;-------------------------------------------------
        ;讀的程序,從中讀出兩個字節的溫度數據
        READ_1820:MOV R4,#2 ;將溫度高位和低位從DS18B20中讀出
        MOV R1,#DI_8BIT ;低位存入DI_8BIT,高位存入GAO_8BIT
        RE0:MOV R2,#8 ;數據一共有8位
        RE1:CLR C
        SETB DQ
        NOP
        NOP
        CLR DQ
        NOP
        NOP
        NOP
        SETB DQ
        MOV R3,#9
        RE2:DJNZ R3,RE2
        MOV C,DQ
        MOV R3,#23
        RE3:DJNZ R3,RE3
        RRC A
        DJNZ R2,RE1
        MOV @R1,A
        INC R1
        DJNZ R4,RE0
        /* DEC R1
        MOV A,GAO_8BIT
        XCHD A,@R1
        XCH A,@R1
        MOV GAO_8BIT,A
        MOV A,@R1
        SWAP A
        MOV @R1,A */
        RET
        ;-------------------------------------------------
        ;讀出后轉換的溫度值
        ZHUANHUAN:
        //SETB DQ
        LCALL INIT_1820 ;先復位DS18B20
        JB F0,ZH1
        RET ;判斷DS1820是否存在?若DS18B20不存在則返回
        ZH1:MOV A,#0CCH ;跳過ROM匹配
        LCALL WRITE_1820
        MOV A,#44H ;發出溫度轉換命令
        LCALL WRITE_1820
        LCALL DISPLAY ;等待AD轉換結束,12位的話750微秒
        LCALL INIT_1820 ;準備讀溫度前先復位
        MOV A,#0CCH ;跳過ROM匹配
        LCALL WRITE_1820
        MOV A,#0BEH ;發出讀溫度命令
        LCALL WRITE_1820
        LCALL READ_1820
        RET
        ;-------------------------------------------------
        ;數據處理子程序
        CHULI:
        MOV P0,GAO_8BIT
        MOV P2,DI_8BIT
        MOV A,GAO_8BIT
        JB ACC.7,FU
        MOV A,DI_8BIT
        MOV B,#16
        DIV AB

        MOV 35H,A ;將DI_8BIT的高四位右移四位,存入35H中(溫度值)
        MOV A,B ;將TEMPER_L的低四位X10/16得小數后一位數.
        MOV B,#10
        MUL AB
        MOV B,#16
        DIV AB
        MOV 36H,A ;將小數后一位數.存入36H中
        MOV A,GAO_8BIT ;TEMPER_H中存放高8位數,權重16
        MOV B,#16
        MUL AB
        ADD A,35H ;35H中存入溫度值的整數部分
        MOV B,#10
        DIV AB
        MOV GE_BIT,B ;個位存入30H中
        MOV B,#10 ;
        DIV AB ;
        MOV SHI_BIT,B ;十位存入31H中
        MOV B,#10 ;
        DIV AB ;
        MOV BAI_BIT,B ;百位存入32H中
        MOV A,GAO_8BIT
        MOV 37H,#10H ;
        JB ACC.7,EXIT
        MOV 37H,#00H
        SJMP EXIT
        FU:
        MOV A,DI_8BIT
        CPL A
        ADD A,#1
        MOV B,#16
        DIV AB
        MOV 35H,A ;將DI_8BIT的高四位右移四位,存入35H中(溫度值)
        MOV A,B ;將TEMPER_L的低四位X10/16得小數后一位數.
        MOV B,#10
        MUL AB
        MOV B,#16
        DIV AB
        // MOV 36H,A ;將小數后一位數.存入36H中
        // MOV A,GAO_8BIT ;TEMPER_H中存放高8位數,權重16
        MOV B,#16
        MUL AB
        ADD A,35H ;35H中存入溫度值的整數部分
        MOV B,#10
        DIV AB
        MOV GE_BIT,B ;個位存入30H中
        MOV B,#10 ;
        DIV AB ;
        MOV SHI_BIT,B ;十位存入31H中
        MOV B,#10 ;
        DIV AB ;
        MOV BAI_BIT,B ;百位存入32H中
        MOV A,GAO_8BIT
        MOV 37H,#10H ;
        JB ACC.7,EXIT
        MOV 37H,#00H
        SJMP EXIT
        EXIT:RET

        51單片機相關文章:51單片機教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 乌鲁木齐市| 宿迁市| 天峨县| 巴马| 电白县| 新河县| 修武县| 林周县| 巴林右旗| 射阳县| 泌阳县| 叙永县| 唐山市| 北安市| 呼伦贝尔市| 饶河县| 陵水| 离岛区| 独山县| 新兴县| 梁山县| 连城县| 河北区| 兴仁县| 东港市| 庄浪县| 许昌市| 三河市| 广汉市| 河曲县| 田东县| 西盟| 兴化市| 婺源县| 横山县| 临潭县| 邮箱| 东乡| 土默特右旗| 靖江市| 开原市|