新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > PIC16F877A控制DS18B20匯編程序

        PIC16F877A控制DS18B20匯編程序

        作者: 時間:2012-11-27 來源:網(wǎng)絡(luò) 收藏

        ;======================================================

        ;*******************************************************
        ;二進制轉(zhuǎn)BCD碼
        ;****************************************************
        _BCD CLRF SHI ;保存地址清零
        CLRF GE
        MOVF BIN_L,F ;組合碼自己給自己賦值,測試是否為0
        SKPNZ ;不為0則跳到下一步
        RETLW 00H
        SHI_ MOVLW D'10'
        SUBWF BIN_L,W ;BIN_L減10,結(jié)果存到W寄存器
        BTFSS STATUS,C ;執(zhí)行減法后,如果無借位
        GOTO GE_
        MOVWF BIN_L
        INCF SHI
        GOTO SHI_
        GE_ MOVF BIN_L,W
        MOVWF GE
        RETLW 00H
        ;=================================================

        ;**********************************************************
        ;延時200ms
        ;************************************************************
        DELAY_MAX
        MOVLW 0FFH
        MOVWF Y1
        MOVLW 0FFH
        MOVWF Y2
        DECFSZ Y2
        GOTO $-1
        DECFSZ Y1
        GOTO $-5
        RETLW 00H
        ;==========================================

        ;***************************************************
        ;延時6ms
        ;*****************************************************
        DELAY
        MOVLW 03FH
        MOVWF Y1
        MOVLW 020H
        MOVWF Y2
        DECFSZ Y2
        GOTO $-1
        DECFSZ Y1
        GOTO $-5
        RETLW 00H
        ;==============================================

        ;********************************************
        ;延時750us子程序
        ;**********************************************************
        DELAY_750US
        MOVLW 09H
        MOVWF Y1
        MOVLW 01AH
        MOVWF Y2
        DECFSZ Y2
        GOTO $-1
        DECFSZ Y1
        GOTO $-5
        RETLW 00H
        ;=========================================

        ;*******************************************************
        ;查表子程序,用于顯示段碼數(shù)字
        ;數(shù)碼管為共陽數(shù)碼管
        ;********************************************************
        TABLE
        ADDWF PCL,F
        RETLW 0C0H ;"0"
        RETLW 0F9H ;"1"
        RETLW 0A4H ;"2"
        RETLW 0B0H ;"3"
        RETLW 99H ;"4"
        RETLW 92H ;"5"
        RETLW 82H ;"6"
        RETLW 0F8H ;"7"
        RETLW 80H ;"8"
        RETLW 90H ;"9"
        ;===============================================

        ;***********************************************************
        ;復位和應(yīng)答子程序
        ;************************************************************
        RESET BSF STATUS,RP0 ;使當前體為體1
        BCF DIR ;使數(shù)據(jù)位為輸出
        BCF STATUS,RP0 ;使當前體為體0
        BSF DQ ;拉高數(shù)據(jù)位
        NOP ;空循環(huán)
        BCF DQ ;拉低數(shù)據(jù)位
        MOVLW D'200' ;延時600us
        MOVWF Y1
        DECFSZ Y1
        GOTO $-1
        BSF STATUS,RP0 ;使當前體為體1
        BSF DIR ;使數(shù)據(jù)位為輸入
        BCF STATUS,RP0 ;使當前體為體0
        MOVLW D'30' ;延時90us
        MOVWF Y1
        DECFSZ Y1
        GOTO $-1
        BTFSC DQ ;主機接收到低電平應(yīng)答脈沖,跳轉(zhuǎn)到下一句
        GOTO RESET
        MOVLW D'80' ;延時240us
        MOVWF Y1
        DECFSZ Y1
        GOTO $-1
        BTFSS DQ ;主機接收到高電平應(yīng)答脈沖,跳轉(zhuǎn)到下一句
        GOTO RESET
        RETLW 00H ;返回00H,復位應(yīng)答結(jié)束
        ;=================================================

        ;***********************************************************
        ;寫子程序
        ;************************************************************
        WR18B20
        MOVWF COMD ;把要寫的數(shù)據(jù)寫到COMD內(nèi)
        MOVLW D'8'
        MOVWF COUNT2 ;大循環(huán)8次
        WR0 BSF STATUS,RP0 ;使當前體為體1
        BCF DIR ;使數(shù)據(jù)位為輸出
        BCF STATUS,RP0 ;使當前體為體0
        BCF DQ ;拉低數(shù)據(jù)線
        NOP
        NOP
        MOVLW D'2'
        MOVWF COUNT1 ;延時9us
        WR1 DECFSZ COUNT1,1
        GOTO WR1
        BTFSC COMD,0 ;COMD最低位為0則跳轉(zhuǎn)到下一句
        BSF DQ ;拉高數(shù)據(jù)線
        BTFSC COMD,0 ;COMD最低位為0則跳轉(zhuǎn)到下一句
        NOP
        BCF STATUS,C ;進位位置0
        RRF COMD,1 ;帶進位位,COMD向右移一位
        MOVLW D'20' ;延時60us
        MOVWF COUNT1
        WR2 DECFSZ COUNT1,1
        GOTO WR2
        BSF DQ ;拉高數(shù)據(jù)線,空閑狀態(tài)
        BSF STATUS,RP0 ;使當前體為體1
        BSF DIR ;使數(shù)據(jù)位為輸入
        BCF STATUS,RP0 ;使當前體為體0
        DECFSZ COUNT2,1 ;8次循環(huán)到了則跳出
        GOTO WR0
        RETLW 00H
        ;====================================================

        ******************
        ;讀18B20子程序
        ;**********************************************************
        RE18B20
        MOVLW 8
        MOVWF COUNT2
        RE0 BSF STATUS,RP0 ;使當前體為體1
        BCF DIR ;使數(shù)據(jù)位為輸出
        BCF STATUS,RP0 ;使當前體為體0
        BCF DQ
        MOVLW 2
        MOVWF COUNT1
        RE1 DECFSZ COUNT1,1
        GOTO RE1
        BSF STATUS,RP0 ;使當前體為體1
        BSF DIR ;使數(shù)據(jù)位為輸入
        BCF STATUS,RP0 ;使當前體為體0
        NOP
        BTFSS DQ ;如果數(shù)據(jù)線為高電平,則C=1
        BCF STATUS,C
        BTFSC DQ ;如果數(shù)據(jù)線為低電平,則C=0
        BSF STATUS,C
        RRF DATE,1 ;數(shù)據(jù)依次存在DATE上
        MOVLW D'20' ;延時60us
        MOVWF COUNT1
        RE2 DECFSZ COUNT1,1
        GOTO RE2
        DECFSZ COUNT2,1
        GOTO RE0
        BSF DQ
        RETLW 00H
        ;======================================================

        ;==============================================
        END ;程序結(jié)束


        上一頁 1 2 下一頁

        關(guān)鍵詞: PIC16F877A DS18B20 匯編程序

        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 富顺县| 左贡县| 平度市| 维西| 苍梧县| 清新县| 吴江市| 弥勒县| 四平市| 白朗县| 二连浩特市| 江达县| 谢通门县| 洱源县| 长汀县| 北海市| 安康市| 邵阳市| 平昌县| 革吉县| 和田市| 沙坪坝区| 榆林市| 荣昌县| 鄂托克前旗| 山东省| 盘锦市| 辽中县| 黄龙县| 社旗县| 翁牛特旗| 吉隆县| 徐汇区| 玛多县| 陈巴尔虎旗| 德庆县| 崇礼县| 江陵县| 浪卡子县| 白山市| 滨州市|