新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)實(shí)驗(yàn)板DS18B20測(cè)溫程序

        51單片機(jī)實(shí)驗(yàn)板DS18B20測(cè)溫程序

        作者: 時(shí)間:2012-12-05 來源:網(wǎng)絡(luò) 收藏

        ;-------------------------------------------------
        ;寫的子程序(有具體的時(shí)序要求)
        WRITE_1820:MOV R2,#8 ;一共8位數(shù)據(jù)
        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

        ;-------------------------------------------------
        ;讀的程序,從中讀出兩個(gè)字節(jié)的溫度數(shù)據(jù)
        READ_1820:MOV R4,#2 ;將溫度高位和低位從DS18B20中讀出
        MOV R1,#DI_8BIT ;低位存入DI_8BIT,高位存入GAO_8BIT
        RE0:MOV R2,#8 ;數(shù)據(jù)一共有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
        ;-------------------------------------------------
        ;讀出后轉(zhuǎn)換的溫度值
        ZHUANHUAN:
        //SETB DQ
        LCALL INIT_1820 ;先復(fù)位DS18B20
        JB F0,ZH1
        RET ;判斷DS1820是否存在?若DS18B20不存在則返回
        ZH1:MOV A,#0CCH ;跳過ROM匹配
        LCALL WRITE_1820
        MOV A,#44H ;發(fā)出溫度轉(zhuǎn)換命令
        LCALL WRITE_1820
        LCALL DISPLAY ;等待AD轉(zhuǎn)換結(jié)束,12位的話750微秒
        LCALL INIT_1820 ;準(zhǔn)備讀溫度前先復(fù)位
        MOV A,#0CCH ;跳過ROM匹配
        LCALL WRITE_1820
        MOV A,#0BEH ;發(fā)出讀溫度命令
        LCALL WRITE_1820
        LCALL READ_1820
        RET
        ;-------------------------------------------------
        ;數(shù)據(jù)處理子程序
        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得小數(shù)后一位數(shù).
        MOV B,#10
        MUL AB
        MOV B,#16
        DIV AB
        MOV 36H,A ;將小數(shù)后一位數(shù).存入36H中
        MOV A,GAO_8BIT ;TEMPER_H中存放高8位數(shù),權(quán)重16
        MOV B,#16
        MUL AB
        ADD A,35H ;35H中存入溫度值的整數(shù)部分
        MOV B,#10
        DIV AB
        MOV GE_BIT,B ;個(gè)位存入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得小數(shù)后一位數(shù).
        MOV B,#10
        MUL AB
        MOV B,#16
        DIV AB
        // MOV 36H,A ;將小數(shù)后一位數(shù).存入36H中
        // MOV A,GAO_8BIT ;TEMPER_H中存放高8位數(shù),權(quán)重16
        MOV B,#16
        MUL AB
        ADD A,35H ;35H中存入溫度值的整數(shù)部分
        MOV B,#10
        DIV AB
        MOV GE_BIT,B ;個(gè)位存入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單片機(jī)相關(guān)文章:51單片機(jī)教程




        評(píng)論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 东乌珠穆沁旗| 宁乡县| 遵义市| 长沙市| 镇原县| 成安县| 黑龙江省| 浮梁县| 白城市| 虹口区| 隆尧县| 兰州市| 兰考县| 玉山县| 杨浦区| 乐都县| 平果县| 太仓市| 平乐县| 宁武县| 来凤县| 融水| 宾阳县| 出国| 乌拉特中旗| 阜康市| 长乐市| 始兴县| 礼泉县| 玛纳斯县| 浦县| 彭州市| 祁连县| 镇宁| 宁强县| 普安县| 应城市| 嵊泗县| 华安县| 富蕴县| 柳州市|