void IC1_ISR() iv IVT_INPUT_CAPTURE_1 ilevel 6 ics ICS_SOFT {
unsigned long temp = 0;
LATG.f6 = 1;
sync = 1;
TMR1 = 0; //reset timeout comm.
temp = IC1BUF;
IC1BUF = 0;
if (toogle1 == 0) {
ic1_start = temp;
toogle1 = 1;
}
else {
// value1 = CalculDelta(temp, ic1_start);
// Calcul T2-T1, même si le timer déborde et repart à 0
if (temp<ic1_start) {
// théoriquement impossible sauf en cas de débordement
value1 = 4294967295-(ic1_start-temp)+1;
}
else value1 = temp-ic1_start;
toogle1 = 0;
}
debug_toogle++;
if (debug_toogle >= 50) {
debug_toogle = 0;
LATD.f1 = !PORTD.f1;
}
IC1IF_bit = 0;
}
Interruption Input Capture
Écrit par
dans