GOTO RCV11 ; [0] Edge found--Process
CLRWDT ; Clear watchdog Timer
BTFSC PORTA,RFIN ; Wait for Next rising edge
GOTO RCV11 ; [0] Edge found--Process
DECFSZ CNT2,1 ; Decrement Timeout counter
GOTO RCV10B ; Loop Back
; TOTAL = 8, RFIN CHECKED EVERY 4uS ON AVERAGE
DECFSZ TMP_CNT,1 ; ALL Te PERIODS
GOTO RCV10A ; ... NO, THEN WAIT FOR NEXT ONE
> GOTO RMT01 ; [0] ... YES, [0] TIMEOUT--no edge found
RCV11
MOVLW 3H ; SEE NOTE BELOW
SUBWF CNT0,W ;
MOVWF CNT2 ;
;*************************************************************************
; 2 SETUP OF TEMP LOOP COUNTER ( ONLY ONCE )
; 2 SETUP TE LOOP COUNTER ( MAX 4 )
; 3 DECREMENT TEMP LOOP COUNTER ( MAX 4 )
; 4 IS THE AVERAGE PLAY BETWEEN EDGE AND EDJE BEING DETECTED IN RCV9
; 2 JUMP OUT OF RCV10B TO RCV11
; 3 FOR RCV11
; TOTAL 10 INSTRUCTIONS BETWEEN EDGE AND ENTERING DL1
; THEREFORE SUBTRACT 10/4 = 2.5 => 3 DL1 LOOPS TO COMPENSATE FOR
;*************************************************************************
DL1
CLRWDT ; RESET WATCHDOG TIMER
DECFSZ CNT2,1 ; [2, IF SKIP]
GOTO DL1 ; CNT0 X 4 us
SAMPLE1
BTFSS PORTA,RFIN ; INPUT HIGH? FIRST SAMPLE
GOTO RMT01 ; [0] NO--ERROR
MOVF CNT0,W ; CALIBRATION COUNTER
MOVWF CNT2 ; (NOMINALLY 75 FOR 300 us PULSE)
DECF CNT2,1 ; SUBTRACT 2 FROM FINAL CALIB COUNTER TO COMPENATE FOR THIS
GOTO $+1 ;
NOP ;
; TOTAL = 8 => 1 LOOP COUNTER
DL2
CLRWDT ; RESET WATCHDOG TIMER
GOTO $+1 ; WASTE TIME
GOTO $+1 ; WASTE TIME
DECFSZ CNT2,1 ;
GOTO DL2 ;
CNT0 X 8 us [ CNT0 x Te ]
SAMPLE2
BCF FLAGS,BITIN ; CLEAR BIT POSITION
BTFSS PORTA,RFIN ; [1.5] LEAVE 0 IF LINE HIGH
BSF FLAGS,BITIN ; [0.5] MAKE 1 IF LINE LOW
; SUB TOTAL = 3 CYCLES
CALL ROT_SHIFT ; [11]+ CSR SHIFT + CALL
BCF CSR7,7 ;
BTFSC FLAGS,BITIN ; [1.5]
BSF CSR7,7 ; [0.5]
; SUB TOTAL = 16 CYCLES
1.部分资源来自网络,经ET电子归类整理,旨在服务电子爱好者并无商业目的,不保证正确性与完整性.
2.如果您觉得本站资源对您有用,请告知您的好友,用搜索引擎搜"ET电子"即可.

