... springt beim Starten des Programms rein, aber danach nicht wieder ...
Woher weißt Du, dass die ISR nicht wieder angesprungen wird? Ich nehme in solchen Fällen in der ISR meist ein zusätzliches Statement, mit dem ich nen Ausgang (üblicherweise ne LED) toggle. Damit kann man etwas sehen oder bei schnellen Zyklen evtl. auf dem Oskar verfolgen.

Code: ... wait{} ... ISR { ... GREEN_LED_ON;} ...
Setzen wir mal voraus, dass das GREEN_LED_ON ein Makro ist, das auch den Ausgang so setzt, dass die LED angeht. Und wo bitte geht die wieder aus?!?!? Ich seh nur die leere wait{}. Dein Codefenster enthält 1. nicht den ganzen Code - siehe das fehlende Makro, 2. eine ISR mit einer einzigen Funktion und 3. eine leere wait-Schleife die keine Änderung des einmal hergestellten Zustandes bewirkt.

Heilung evtl. durch ein Statement in der while-Schleife: delay_ms ( 1000); LED_OFF; delay_ms ( 1000); ... Das delay evtl. als die übliche Compilerroutine oder eine eigene Konstruktion - oder irgendeine Bremsschleife . . .

Viel Erfolg