Vielleicht noch zwei Hinweise um die Zuverlässigkeit und die Lesbarkeit des Codes zu verbessern:

1. Falls man längere Zeiten messen möchte, muss man logischerweise eine größere Timer-Variable nehmen, z.B. 16 oder sogar 32 Bit. Hier können aber Probleme auftauchen, da der AVR mehr als einen Befehl braucht um eine solche Variable zu lesen. In diesem Fall würde ich dringend eine Zugriffsfunktion wie GetTime() oder sowas empfehlen, die den Lesezugriff atomar durchführt (Interrupts aus, Variable lesen, Interrupts wieder an), denn sonst wirst du sicher früher oder später mal über seltsame, sporadisch auftretende Bugs stolpern.

2. Mach dir doch noch eine Funktion wie TimedOut(Start, End, Timeout) die dir überprüft, ob die gewünschte Zeitspanne bereits abgelaufen ist oder nicht. Das macht den Code noch etwas leichter lesbar, und außerdem muss man so wenger Tippen . Die kann dann auch gleich einen evtl. aufgetretenen Überlauf (Start > End) berücksichtigen (das ist sinnvoll um durch einen Überlauf ausgelöste Bugs zu vermeiden).