新聞中心

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

PIC16F877A控制DS18B20匯編程序

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

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

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

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

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

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

;*******************************************************
;查表子程序,用于顯示段碼數(shù)字
;數(shù)碼管為共陽(yáng)數(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 ;使當(dāng)前體為體1
BCF DIR ;使數(shù)據(jù)位為輸出
BCF STATUS,RP0 ;使當(dāng)前體為體0
BSF DQ ;拉高數(shù)據(jù)位
NOP ;空循環(huán)
BCF DQ ;拉低數(shù)據(jù)位
MOVLW D'200' ;延時(shí)600us
MOVWF Y1
DECFSZ Y1
GOTO $-1
BSF STATUS,RP0 ;使當(dāng)前體為體1
BSF DIR ;使數(shù)據(jù)位為輸入
BCF STATUS,RP0 ;使當(dāng)前體為體0
MOVLW D'30' ;延時(shí)90us
MOVWF Y1
DECFSZ Y1
GOTO $-1
BTFSC DQ ;主機(jī)接收到低電平應(yīng)答脈沖,跳轉(zhuǎn)到下一句
GOTO RESET
MOVLW D'80' ;延時(shí)240us
MOVWF Y1
DECFSZ Y1
GOTO $-1
BTFSS DQ ;主機(jī)接收到高電平應(yīng)答脈沖,跳轉(zhuǎn)到下一句
GOTO RESET
RETLW 00H ;返回00H,復(fù)位應(yīng)答結(jié)束
;=================================================

;***********************************************************
;寫(xiě)子程序
;************************************************************
WR18B20
MOVWF COMD ;把要寫(xiě)的數(shù)據(jù)寫(xiě)到COMD內(nèi)
MOVLW D'8'
MOVWF COUNT2 ;大循環(huán)8次
WR0 BSF STATUS,RP0 ;使當(dāng)前體為體1
BCF DIR ;使數(shù)據(jù)位為輸出
BCF STATUS,RP0 ;使當(dāng)前體為體0
BCF DQ ;拉低數(shù)據(jù)線
NOP
NOP
MOVLW D'2'
MOVWF COUNT1 ;延時(shí)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 ;進(jìn)位位置0
RRF COMD,1 ;帶進(jìn)位位,COMD向右移一位
MOVLW D'20' ;延時(shí)60us
MOVWF COUNT1
WR2 DECFSZ COUNT1,1
GOTO WR2
BSF DQ ;拉高數(shù)據(jù)線,空閑狀態(tài)
BSF STATUS,RP0 ;使當(dāng)前體為體1
BSF DIR ;使數(shù)據(jù)位為輸入
BCF STATUS,RP0 ;使當(dāng)前體為體0
DECFSZ COUNT2,1 ;8次循環(huán)到了則跳出
GOTO WR0
RETLW 00H
;====================================================

******************
;讀18B20子程序
;**********************************************************
RE18B20
MOVLW 8
MOVWF COUNT2
RE0 BSF STATUS,RP0 ;使當(dāng)前體為體1
BCF DIR ;使數(shù)據(jù)位為輸出
BCF STATUS,RP0 ;使當(dāng)前體為體0
BCF DQ
MOVLW 2
MOVWF COUNT1
RE1 DECFSZ COUNT1,1
GOTO RE1
BSF STATUS,RP0 ;使當(dāng)前體為體1
BSF DIR ;使數(shù)據(jù)位為輸入
BCF STATUS,RP0 ;使當(dāng)前體為體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' ;延時(shí)60us
MOVWF COUNT1
RE2 DECFSZ COUNT1,1
GOTO RE2
DECFSZ COUNT2,1
GOTO RE0
BSF DQ
RETLW 00H
;======================================================

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


上一頁(yè) 1 2 下一頁(yè)

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

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉