Außerdem wird das Zurücksetzen des Timers nicht richtig funktionieren, weil falsche Reihenfolge der Zugriffe. Warum überhaupt einzelne Zugriffe auf Low- und High-Byte? Warum nicht einfach:
Code:
  TachoTime = TachoTimeCounterHigh;
  TachoTime = TachoTime<<16;
  TachoTime = TachoTime + TCNT1;
  TCNT1 = 0;
  TachoTimeCounterHigh = 0;
Besser und genauer wäre es natürlich, das Input-Capturing des Timers zu benutzen.