Timer 1 usato due volte in modi diversi

Quando il timer arriva al valore OCR1A per prima cosa faccio

if(!NotRun && fire) PORTD = PORTD | B00010000;
  else PORTD =PORTD & B11101111;

Alzo il pin 4.

Dopo di che fermo il timer e calcolo i giri basandomi sul fronte di salita attuale e su quello successivo.