Hallo Robertino,

was mir aufgefallen ist, die serout Routine beendest Du mittels reti, d.h. Return from Interrupt.

Diese Routine ist aber keine Interrupt-Routine. Ersetze einmal das reti durch ret. Dies könnte das Verhalten erklären.

Code:
serout:
       sbis USR,UDRE                         ; warten bis Sender frei ist
       rjmp serout
       out UDR, temp                         ; sende Daten

       reti                                  ; <- ret statt reti