na początku programu ustawiam bity:
GICR |= 1 << INT0;
MCUCR |= (1 << ISC00) | (1 << ISC01); //przerwanie zboczem narastającym
aby zezwolić na obsługę przerwań (INT0 w rejestrze GICR) oraz by przerwanie wyzwoliło zbocze narastające sygnału który sie pojawi (ISC00 = 1 i ISC01 = 1 w rejestrze MCUCR).
następnie w procedurze obsługi przerwania rozpatruje dwie sytuacje, gdy pomiar jeszcze się nie zaczął i druga gdy już się rozpoczął. aby rozróżnić te sytuacje używam zmiennej
bool pomiar. przy obsłudze pierwszej sytuacji, tj. gdy pomiar jeszcze się nie rozpoczął w pierwszej kolejności ustawiam bity w rejestrze MCUCR, aby zadeklarować gotowoć mikrokontrolera do obsługi przerwania zboczem obadającym sygnału(czyli ustawiam ISC00 = 0 i ISC01 = 1), a następnie właczam licznik. w kodzie który zamieściłem zamiast tego włączam diody na porcie C. ułatwiłem to żeby nie mieszać do tego ewentualnich problemów jakie mogą wystąpić z timerem. zmieniam też zmienną
pomiar żeby przy przerwaniu zboczem opadającym, kiedy sygnał się skończy, obsłużyć przerwanie częścią kodu w else instrukcji warunkowej. tam ustawiam bity w rejestrze tak aby przy kolejnym sygnale zostało wywołane przerwanie zboczem narastającym, dając możliwość zmierzenia długości kolejnego sygnału. zmieniam również zmienną
pomiar, a obsłużenie tej części procedury obsługi przerwania sygnalizuje sobie w kodzie wyłączeniem części diód.