技术热线: 4007-888-234

DS18B20在16F877A上的实现

更新时间: 2019-03-26
阅读量:2226

;************************************************************************
;<<温度计-基于DS18B20>>
;时间:2006.3.6
;程序文件名:“DS18B20.asm”
;功能实现:通过DS18B20来读取温度,显示在2LED上,精确到1
;硬件连接:(1)RC0-RC7接共阳数码管的段码A-H
;             RA0-RA3接共阳数码管的位码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                       ;要进行转换的字节
      GE                          ;转换后的个位

__CONFIG  3F72H                   ;晶振配置HS,看门狗禁止,上电延时使能,掉电复位使能
                                  ;低电压编程禁止,代码不保护

 

#DEFINE   DQ         PORTB,2
#DEFINE   DIR        TRISB,2
         
CBLOCK    20H
      Y1
      Y2
      COUNT1
      COUNT2
      COMD
      DATE
      BIN_L                       ;要进行转换的字节
      GE                          ;转换后的个位

__CONFIG  3F72H                   ;晶振配置HS,看门狗禁止,上电延时使能,掉电复位使能
                                  ;低电压编程禁止,代码不保护

 

#DEFINE   DQ         PORTB,2
#DEFINE   DIR        TRISB,2
         
CBLOCK    20H
      Y1
      Y2
      COUNT1
      COUNT2
      COMD
      DATE
      BIN_L                       ;要进行转换的字节
      GE                          ;转换后的个位


 MOVLW     0BEH           ;读内部RAM中的9字节内容
         CALL      WR18B20
         NOP
         CALL      RE18B20        ;读数据   
         MOVF      DATE,W        
         MOVWF     DATE_L         ;读低8
         CALL      RE18B20        ;读数据   
         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        ;调用数码管显示程序
         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             ;使数据线为输入

 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        ;调用数码管显示程序
         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             ;使数据线为输入

      BSF       STATUS,RP0     ;使当前体为体1
         BSF       DIR            ;使数据位为输入
         BCF       STATUS,RP0     ;使当前体为体
         NOP
         BTFSS     DQ             ;如果数据线为高电平,则C=1
         BCF       STATUS,C
         BTFSC     DQ             ;如果数据线为低电平,则C=0
         BSF       STATUS,C
         RRF       DATE,1          ;数据依次存在DATE
         MOVLW     D'20'           ;延时60us
         MOVWF     COUNT1
RE2      DECFSZ    COUNT1,1
         GOTO      RE2
         DECFSZ    COUNT2,1
         GOTO      RE0
         BSF       DQ
         RETLW     00H
;=======================================================================       
      

 

;=======================================================================
         END                      ;程序结束