專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命
提供開發(fā)工具、應用測試 完善的開發(fā)代碼案例庫分享
從全面的產(chǎn)品導入到強大技術支援服務 全程貼心伴隨服務,創(chuàng)造無限潛能!
;************************************************************************
;<<溫度計-基于DS18B20>>
;時間:2006.3.6
;程序文件名:“DS18B20.asm”
;功能實現(xiàn):通過DS18B20來讀取溫度,顯示在2位LED上,精確到1度
;硬件連接:(1)RC0-RC7接共陽數(shù)碼管的段碼A-H
; RA0-RA3接共陽數(shù)碼管的位碼DIG0-DIG3
;***********************************************************************
;***********************************************************************
;定義單片機型號為PIC16F877A
;程序包含文件:P16F877A.INC
;定義配置字
;***********************************************************************
LIST P=16F877A ;定義本程序所使用的芯片為PIC16F877A
#INCLUDE "P16F877A.INC" ;定義本程序包含該文件
__CONFIG 3F72H ;晶振配置HS,看門狗禁止,上電延時使能,掉電復位使能
;低電壓編程禁止,代碼不保護
#DEFINE DQ PORTB,2
#DEFINE DIR TRISB,2
CBLOCK 20H
Y1
Y2
COUNT1
COUNT2
COMD
DATE
BIN_L ;要進行轉換的字節(jié)
GE ;轉換后的個位
__CONFIG 3F72H ;晶振配置HS,看門狗禁止,上電延時使能,掉電復位使能
;低電壓編程禁止,代碼不保護
#DEFINE DQ PORTB,2
#DEFINE DIR TRISB,2
CBLOCK 20H
Y1
Y2
COUNT1
COUNT2
COMD
DATE
BIN_L ;要進行轉換的字節(jié)
GE ;轉換后的個位
__CONFIG 3F72H ;晶振配置HS,看門狗禁止,上電延時使能,掉電復位使能
;低電壓編程禁止,代碼不保護
#DEFINE DQ PORTB,2
#DEFINE DIR TRISB,2
CBLOCK 20H
Y1
Y2
COUNT1
COUNT2
COMD
DATE
BIN_L ;要進行轉換的字節(jié)
GE ;轉換后的個位
MOVLW 0BEH ;讀內(nèi)部RAM中的9字節(jié)內(nèi)容
CALL WR18B20
NOP
CALL RE18B20 ;讀數(shù)據(jù)
MOVF DATE,W
MOVWF DATE_L ;讀低8位
CALL RE18B20 ;讀數(shù)據(jù)
MOVF DATE,W
MOVWF DATE_H ;讀高8位
MOVF DATE_L,W
;------------------------顯示處理--------------------------------------
RRF DATE_H,F
RRF DATE_L,F
RRF DATE_H,F
RRF DATE_L,F
RRF DATE_H,F
RRF DATE_L,F
RRF DATE_H,F
RRF DATE_L,F
MOVF DATE_L,W
MOVWF BIN_L ;把高8位的低4位和低8位的高4位組合起來
CALL DISPLAY ;調用數(shù)碼管顯示程序
GOTO START
;=======================================================================
;***********************************************************************
;初始化和消影
;***********************************************************************
INTIAL BSF STATUS,RP0 ;定義當前體為體1,對方向寄存器進行修改
MOVLW 07H
MOVWF ADCON1 ;關閉A口的模擬通道
MOVLW 00H
MOVWF TRISC ;段碼顯示口為輸出口
MOVLW 0F0H
ANDWF TRISA,1 ;使位碼(RA0-RA3)為輸出口
BSF DIR ;使數(shù)據(jù)線為輸入
RRF DATE_L,F
RRF DATE_H,F
RRF DATE_L,F
MOVF DATE_L,W
MOVWF BIN_L ;把高8位的低4位和低8位的高4位組合起來
CALL DISPLAY ;調用數(shù)碼管顯示程序
GOTO START
;=======================================================================
;***********************************************************************
;初始化和消影
;***********************************************************************
INTIAL BSF STATUS,RP0 ;定義當前體為體1,對方向寄存器進行修改
MOVLW 07H
MOVWF ADCON1 ;關閉A口的模擬通道
MOVLW 00H
MOVWF TRISC ;段碼顯示口為輸出口
MOVLW 0F0H
ANDWF TRISA,1 ;使位碼(RA0-RA3)為輸出口
BSF DIR ;使數(shù)據(jù)線為輸入
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 ;程序結束