Vermutlich möchtest Du die Zeit in 1/1000 Sekunden stoppen ?
Dann solltest Du einen Timer so initialisieren, daß er jede Millisekunde einen Interrupt auslöst. Damit ist erst einmal gewährleistet, daß kein Timer-Überlauf verpaßt wird und somit keine Zeit verloren geht.
Die Lichtschranke würde ich an den INT-Eingangspin legen, damit bei jeder steigenden Flanke ebenfalls ein Interrupt ausgelöst wird.
Bei jedem Millisekunden-Int wird ein 16...24-Bit-Zähler (= 3 Bytes) um 1 erhöht.
Bei einem Eingangs-Int wird der Zähler-Inhalt in eine 'Anzeige-Variable' kopiert und dann auf 0 gesetzt. Außerdem einen weitern Zähler für die Runden um 1 erhöhen. Dann noch ein Flag setzen, damit das Hauptprogramm die neuen Werte für das Display aufbereiten und dort zur Anzeige bringen kann.

Fragen nach C-Programmierung kann ich nicht beantworten, da ich ausschließlich in Assembler programmiere.
Beispiele zu meinem Vorschlag findest Du (in Assembler) auf dieser und dieser Seite.