ccp1con = 0b00000101; //capture rising edge
t1con = 0b00010001; //Timer1 enable, pre=2
t3con.T3CCP1 = 0; //Timer1 is clock source for CCP
rcon.IPEN = 0; //disable priority interrupts
pie1.CCP1IE = 1; //enable ccp1 interrupt
intcon.PEIE = 1; //enable peripheral interrupts
intcon.GIE = 1; //enable global interrupts
...
...
...
void interrupt(void)
{
if(porta.RB3){ //rising edge detected
start = ccpr1l; //store start value
start |= ccpr1h << 8;
ccp1con = 0b00000100; //set to capture falling edge
}
else{ //falling edge detected
end = ccpr1l; //store end value
end |= ccpr1h << 8;
ccp1con = 0b00000101; //set to capture rising edge
flag = 1;
if(end < start)
pwin = (0xffff - start) + end;
else
pwin = end - start;
}
pir1.CCP1IF = 0; //clear interrupt flag
}