
STRB: INCF TSTROBE,1 ;; INCREMENT TSTROBE
BTFSC STATUS,Z ;; IF TSTROBE OVERFLOWED TO ZERO THEN
GOTO RTI ;; SOMETHING WRONG AND RETURN FROM INTERRUPT
BTFSS PORTB,0 ;; LOOK FOR RISE ON ZAC WIRE
GOTO STRB ;; IF RISE HAS NOT YET HAPPENED INCREMENT TSTROBE
CLRF BIT_CNT ;; MEMORY LOCATION USED AS BIT COUNTER
BIT_LOOP: CLRF STRB_CNT ;; MEMORY LOCATION USED AS STROBE COUNTER
CLRF TIME_OUT ;; MEMORY LOCATION USED FOR EDGE TIME OUT
WAIT_FALL: BTFSS PORTB,0 ;; WAIT FOR FALL OF ZAC WIRE
GOTO PAUSE_STRB ;; NEXT FALLING EDGE OCCURRED
INCFSZ TIME_OUT,1 ;; CHECK IF EDGE TIME OUT COUNTER OVERFLOWED
GOTO WAIT_FALL
GOTO RTI ;; EDGE TIME OUT OCCURRED
PAUSE_STRB: INCF STRB_CNT,1 ;; INCREMENT THE STROBE COUNTER
MOVF TSTROBE,0 ;; MOVE TSTROBE TO W REG
SUBWF STRB_CNT,0 ;; COMPARE STRB_CNT TO TSTROBE
BTFSS STATUS,Z ;; IF EQUAL THEN IT IS TIME TO STROBE
GOTO PAUSE_STRB ;; ZAC WIRE FOR DATA, OTHERWISE KEEP COUNTING
;; LENGTH OF THIS LOOP IS 6-STATES. THIS HAS TO
;; MATCH THE LENGTH OF THE LOOP THAT ACQUIRED TSTROBE
BCF STATUS,C ;; CLEAR THE CARRY
BTFSC PORTB,0 ;; SAMPLE THE ZAC WIRE INPUT
BSF STATUS,C ;; IF ZAC WIRE WAS HIGH THEN SET THE CARRY
RLF INDF,1 ;; ROTATE CARRY=ZAC WIRE INTO LSB OF REGISTER
;; THAT FSR CURRENTLY POINTS TO
CLRF TIME_OUT ;; CLEAR THE EDGE TIMEOUT COUN
WAIT_RISE: BTFSC PORTB,0 ;; IF RISE HAS OCCURRED THEN WE ARE DONE
GOTO NEXT_BIT
INCFSZ TIME_OUT,1 ;; INCREMENT THE EDGE TIME OUT COUNTER
GOTO WAIT_RISE
GOTO RTI ;; EDGE TIME OUT OCCURRED.
NEXT_BIT: INCF BIT_CNT,1 ;; INCREMENT BIT COUNTER
MOVLW 0X08 ;; THERE ARE 8-BITS OF DATA
SUBWF BIT_CNT,0 ;; TEST IF BIT COUNTER AT LIMIT
BTFSS STATUS,Z ;; IF NOT ZERO THEN GET NEXT BIT
GOTO BIT_LOOP
CLRF TIME_OUT ;; CLEAR THE EDGE TIME OUT COUNTER
WAIT_PF: BTFSS PORTB,0 ;; WAIT FOR FALL OF PARITY
GOTO P_RISE
INCFSZ TIME_OUT,1 ;; INCREMENT TIME_OUT COUNTER
GOTO WAIT_PF
GOTO RTI ;; EDGE TIMEOUT OCCURRED
P_RISE: CLRF TIME_OUT ;; CLEAR THE EDGE TIME OUT COUNTER
WAIT_PR: BTFSC PORTB,0 ;; WAIT FOR RISE OF PARITY
GOTO NEXT_BYTE
INCFSZ TIME_OUT,1 ;; INCREMENT EDGE TIME OUT COUNTER
GOTO WAIT_PR
GOTO RTI ;; EDGE TIME OUT OCCURRED
ATTSic_E2.1.4 | App Note | Temperature Sensor IC 9/15