clrf TMR1H ; |B0
clrf TMR1L ; |B0
Banksel CCP1CON ; |B5
movlw b'00000101' ; |B5
movwf CCP1CON ;CCP1 rising edge capture |B5
_Data ;TMR1 runs continuously
Banksel PIR1 ; |B0
bcf PIR1,CCP1IF ;flag must be cleared after mode change |B0
btfss PIR1,CCP1IF ;test CCP1 interrupt flag (interrupt not enabled) |B0
goto $-1 ; |B0
Banksel CCP1CON ; |B5
movf CCPR1H,w ;start time high byte |B5
movwf CCP_T1H ;save value in shadow register |B?
movf CCPR1L,w ;start time low byte |B5
movwf CCP_T1L ;save value in shadow register |B5
bcf CCP1CON,0 ;change interrupt flag to falling edge |B5
Banksel PIR1 ; |B0
bcf PIR1,CCP1IF ;clear flag |B0
btfss PIR1,CCP1IF ;test CCP1 falling edge interrupt flag |B0
goto $-1 ; |B0
Banksel CCP1CON ; |B5
movf CCPR1H,w ;stop time high byte |B5
movwf CCP_T2H ;save value in shadow register |B5
movf CCPR1L,w ;stop time low byte |B5
movwf CCP_T2L ;save value in shadow register |B5
bsf CCP1CON,0 ;change interrupt flag to rising edge |B5
Banksel PIR1 ; |B0
bcf PIR1,CCP1IF ;clear flag |B0