****
RESET_18B20
;根据DATASHEET介绍,写数据时应遵照如下规定:
;主控制器把总线拉低至少480us,
;18B20等待15-60us后,把总线拉低做为返回给控制器的应答信号
BANKSEL TRISA
BCF TRISA,2
BCF STATUS,RP0
BCF DQ
MOVLW 0A0H
MOVWF COUNT ;160US
DECFSZ COUNT,1
GOTO $-1 ;拉低480us
BSF DQ ;释放总线
MOVLW 14H
MOVWF COUNT
DECFSZ COUNT,1
GOTO $-1 ;等待60us
BANKSEL TRISA
BSF TRISA,2 ;DQ设置为输入
BCF STATUS,RP0
BTFSC DQ ;数据线是否为低
GOTO RESET_18B20 ;否则继续复位
MOVLW 4H
MOVWF COUNT
DECFSZ COUNT,1 ;延时一段时间后再次判断
GOTO $-1
BTFSC DQ
GOTO RESET_18B20
MOVLW 4BH
MOVWF COUNT
DECFSZ COUNT,1
GOTO $-1
BANKSEL TRISA
BCF TRISA,2 ;DQ设置为输出
BCF STATUS,RP0
RETURN
;*********************写DS18B20子程序****************************
WRITE_18B20
;根据DATASHEET介绍,写数据时应遵照如下规定:
;写数据0时,主控制器把总线拉低至少60us
;写数据1时,主控制器把总线拉低,但必须在15us内释放
MOVLW 8H
MOVWF COUNT ;8位数据
BANKSEL TRISA
BCF TRISA,2
BCF STATUS,RP0
BCF STATUS,C
WRITE_18B20_1
BSF DQ ;先保持DQ为高
MOVLW 5H
MOVWF COUNT1
BCF DQ ;拉低DQ15us
DECFSZ COUNT1,1
GOTO $-1
RRF TEMP,1
BTFSS STATUS,C ;判断写的数据为0还是1