rutin1820

;     BCF    TRISC, DATA_PIN
 ;    BCF    PORTC, DATA_PIN		; set serial output to idle

     CALL   INIT		; init DS1820

     mov  O_BYTE,0cch	;skip rom
     CALL   OUT_BYTE
     mov  O_BYTE,44h	;temp conv
     CALL   OUT_BYTE

     CALL   WAIT 	     	; wait for conversion to complete

     CALL   INIT
     mov  O_BYTE,0cch	;skip rom
     CALL   OUT_BYTE
     mov  O_BYTE,0beh
     CALL   OUT_BYTE
     CALL   IN_BYTE		; get from DS1820 and save
     MOVWF  szamlalo
     CALL   IN_BYTE
     MOVWF  szamlahi

     CALL   INIT

	movlw B'10001111'     	;data to the 1st row pos.
	call SENDCMD
	call szamot_kiir

     GOTO   rutin1820      		; do it again


; The following are standard 1-Wire routines.

INIT:
     CALL   PIN_HI
     CALL   PIN_LO		;force low 
     MOVLW  D'50'              ; 500 us delay
     CALL DELAY_10USEC
     CALL PIN_HI           	;release pin
     MOVLW  D'10'              ; 100 us delay
     CALL DELAY_10USEC
     btfss PORTC,DATA_PIN
     MOVLW  D'50'       ; 500 usec delay
     CALL DELAY_10USEC
     RETURN

WAIT:        
     CALL   IN_BYTE
     MOVLW  0FFH
     SUBWF  I_BYTE, W
     BTFSS  STATUS, Z
     GOTO   WAIT
     RETURN  

IN_BYTE:                   ; returns byte in W
     mov INDEX,8
     CLRF I_BYTE

IN_BYTE_1:
     CALL PIN_LO         ; momentary low on DATA_PIN
     NOP
     CALL PIN_HI
     NOP
     NOP
     NOP	
     NOP
     NOP
     NOP	
     movbb TEMP, PORTC 	    ; 7 usecs later, fetch from DATA_PIN
     BTFSS  TEMP, DATA_PIN
     clc	; its a zero
     BTFSC  TEMP, DATA_PIN
     stc 	; its a one

     RRCF    I_BYTE, F
        
     MOVLW  6              ; now delay 60 usecs
     CALL   DELAY_10USEC
     DECFSZ INDEX, F
     GOTO   IN_BYTE_1

     MOVF I_BYTE,w         ; return the result in W
     RETURN

OUT_BYTE:
     mov INDEX,8
OUT_BYTE_1:
     RRCF    O_BYTE, F
     BTFSS  STATUS, C
     GOTO   OUT_0
     GOTO   OUT_1     
OUT_BYTE_2:
     DECFSZ    INDEX, F
     GOTO   OUT_BYTE_1
     RETURN

OUT_0:
     CALL   PIN_LO         	; bring DATA_PIN low
     MOVLW  6 		       	; for 60 usecs
     CALL   DELAY_10USEC
     CALL   PIN_HI
     GOTO   OUT_BYTE_2

OUT_1:
     CALL PIN_LO         	; momentary low
	nop
     CALL   PIN_HI
     MOVLW 6
     CALL DELAY_10USEC
     GOTO   OUT_BYTE_2

;;;;;;

PIN_HI:
     BSF  TRISC, DATA_PIN       ; high impedance
     RETURN

PIN_LO:
     BCF  TRISC, DATA_PIN       ; low impedance zero
     BCF  PORTC, DATA_PIN
     RETURN

DELAY_10USEC:  ; provides a delay equal to W * 10 usecs
     MOVWF LOOP1
DELAY_10USEC_1:
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     NOP
     DECFSZ LOOP1, F
     GOTO DELAY_10USEC_1
     RETURN


;------------------------------------------------------------------------------

