Im Programm sehe ich soweit keinen groben Fehler (habe aber die genauen Register, ... nicht angeschaut).
Ich würde in der Hauptschleife die UART Übertragung machen. Im Interrupt eine variable setzen. Wenn diese gesetzt ist wird die Datenübertragung gestartet (= Minimierung des Datenverkehrs).

Was mir noch auffällt ist das du die variablen im Interrupt nicht als volatile hast. Infos findest du z.b. Bei www.mikrocontroller.net im Artikel GCC tutorial (bzw im Interrupt artikel).

PS: hast du ein oszi damit man sich etwas anschauen könnte?

MfG Hannes