<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          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"
          ;===============================================

          ;***********************************************************
          ;復(fù)位和應(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,復(fù)位應(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)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();