新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > DS18b20和51單片機(jī)連接的匯編程序

        DS18b20和51單片機(jī)連接的匯編程序

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

        僅適合單個(gè)DS18B20和的連接,晶振為12MHZ左右
        DQ:DS18B20的數(shù)據(jù)總線接腳
        FLAG1:標(biāo)志位,為"1"時(shí)表示檢測到DS18B20
        TEMPER_NUM:保存讀出的溫度數(shù)據(jù)
        TEMPER_LEQU36H
        TEMPER_HEQU35H

        DQBITP1.7

        ; DS18B20初始化
        ;//*****************************************//
        INIT_1820:
        SETBDQ
        NOP
        CLRDQ
        MOVR0,#06BH
        TSR1:
        DJNZR0,TSR1; 延時(shí)
        SETBDQ
        MOVR0,#25H
        TSR2:
        JNBDQ,TSR3
        DJNZR0,TSR2
        LJMPTSR4; 延時(shí)
        TSR3:
        SETBFLAG1; 置標(biāo)志位,表示DS1820存在
        LJMPTSR5
        TSR4:
        CLRFLAG1; 清標(biāo)志位,表示DS1820不存在
        LJMPTSR7
        TSR5:
        MOVR0,#06BH
        TSR6:
        DJNZR0,TSR6; 延時(shí)
        TSR7:
        SETBDQ
        RET
        ;//*****************************************//

        ; 重新寫DS18B20暫存存儲器設(shè)定值
        ;//*****************************************//
        RE_CONFIG:
        JBFLAG1,RE_CONFIG1; 若DS18B20存在,轉(zhuǎn)RE_CONFIG1
        RET
        RE_CONFIG1:
        MOVA,#0CCH; 發(fā)SKIP ROM命令
        LCALLWRITE_1820
        MOVA,#4EH; 發(fā)寫暫存存儲器命令
        LCALLWRITE_1820
        MOVA,#00H; TH(報(bào)警上限)中寫入00H
        LCALLWRITE_1820
        MOVA,#00H; TL(報(bào)警下限)中寫入00H
        LCALLWRITE_1820
        MOVA,#1FH; 選擇9位溫度分辨率
        LCALLWRITE_1820
        RET
        ;//*****************************************//

        ; 讀出轉(zhuǎn)換后的溫度值
        ;//*****************************************//
        GET_TEMPER:
        SETBDQ; 定時(shí)入口

        LCALLINIT_1820
        JBFLAG1,TSS2
        RET; 若DS18B20不存在則返回
        TSS2:
        MOVA,#0CCH; 跳過ROM匹配
        LCALLWRITE_1820
        MOVA,#44H; 發(fā)出溫度轉(zhuǎn)換命令
        LCALLWRITE_1820

        LCALLINIT_1820
        MOVA,#0CCH; 跳過ROM匹配
        LCALLWRITE_1820
        MOVA,#0BEH; 發(fā)出讀溫度命令
        LCALLWRITE_1820
        LCALLREAD_1820
        MOVTEMPER_NUM,A; 將讀出的溫度數(shù)據(jù)保存
        RET
        ;//*****************************************//

        ; 讀DS18B20的程序,從DS18B20中讀出一個(gè)字節(jié)的數(shù)據(jù)
        ;//*****************************************//
        READ_1820:
        MOVR2,#8
        RE1:
        CLRC
        SETBDQ
        NOP
        NOP
        CLRDQ
        NOP
        NOP
        NOP
        SETBDQ
        MOVR3,#7
        DJNZR3,$
        MOVC,DQ
        MOVR3,#23
        DJNZR3,$
        RRCA
        DJNZR2,RE1
        RET
        ;//*****************************************//

        ; 寫DS18B20的程序
        ;//*****************************************//
        WRITE_1820:
        MOVR2,#8
        CLRC
        WR1:
        CLRDQ
        MOVR3,#6
        DJNZR3,$
        RRCA
        MOVDQ,C
        MOVR3,#23
        DJNZR3,$
        SETBDQ
        NOP
        DJNZR2,WR1
        SETBDQ
        RET
        ;//*****************************************//

        ; 讀DS18B20的程序,從DS18B20中讀出兩個(gè)字節(jié)的溫度數(shù)據(jù)
        ;//*****************************************//
        READ_18200:
        MOVR4,#2; 將溫度高位和低位從DS18B20中讀出
        MOVR1,#36H; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
        RE00:
        MOVR2,#8
        RE01:
        CLRC
        SETBDQ
        NOP
        NOP
        CLRDQ
        NOP
        NOP
        NOP
        SETBDQ
        MOVR3,#7
        DJNZR3,$
        MOVC,DQ
        MOVR3,#23
        DJNZR3,$
        RRCA
        DJNZR2,RE01
        MOV@R1,A
        DECR1
        DJNZR4,RE00
        RET
        ;//*****************************************//

        ; 將從DS18B20中讀出的溫度數(shù)據(jù)進(jìn)行轉(zhuǎn)換
        ;//*****************************************//
        TEMPER_COV:
        MOVA,#0F0H
        ANLA,TEMPER_L; 舍去溫度低位中小數(shù)點(diǎn)后的四位溫度數(shù)值
        SWAPA
        MOVTEMPER_NUM,A
        MOVA,TEMPER_L
        JNBACC.3,TEMPER_COV1; 四舍五入去溫度值
        INCTEMPER_NUM

        TEMPER_COV1:
        MOVA,TEMPER_H
        ANLA,#07H
        SWAPA
        ORLA,TEMPER_NUM
        MOVTEMPER_NUM,A; 保存變換后的溫度數(shù)據(jù)
        LCALLBIN_BCD
        RET
        ;//*****************************************//

        ; 將16進(jìn)制的溫度數(shù)據(jù)轉(zhuǎn)換成壓縮BCD碼
        ;//*****************************************//
        BIN_BCD:
        MOVDPTR,#TEMP_TAB
        MOVA,TEMPER_NUM
        MOVCA,@A+DPTR
        MOVTEMPER_NUM,A
        RET

        51單片機(jī)相關(guān)文章:51單片機(jī)教程



        上一頁 1 2 下一頁

        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 通许县| 旅游| 登封市| 綦江县| 泌阳县| 镇江市| 凤翔县| 永清县| 江永县| 涟源市| 甘肃省| 库车县| 清涧县| 息烽县| 黔江区| 张家界市| 嘉兴市| 海丰县| 永春县| 澄迈县| 正阳县| 凉城县| 濮阳县| 随州市| 闽清县| 二连浩特市| 鄄城县| 汤原县| 裕民县| 开平市| 磴口县| 徐闻县| 元江| 嘉荫县| 左贡县| 北京市| 寿阳县| 祁门县| 汤阴县| 紫金县| 南雄市|