doch, da kann ich mich auch drann erinnern.

im atmega ist nur ein einziges register (USD) vorhanden, welches die daten hält die gesendet oder empfangen wurden.

wenn man mit serwrite was senden will, muss man nur den wert in das register schieben, und es wird gesendet. da jedoch 2400 baud sehr langsam ist im vergleich zum systemtakt des asuro mit 8000000 hz, passiert es wenn man serread aufruft, dass man versucht, das register USD, in das man gerade geschrieben hat und dessen daten noch nicht abgeschickt wurden, wieder auszulesen. dadurch wird erstens ein frame error ausgelöst, was eine unterbrechung des sendens des aktuellen zeichens zur folge hat, und zweitens werden die daten im USD zerstört.

die warteschleife ist also nur dazu da, um sicherzustellen, dass das USD wieder leer ist, bzw das der letzte sendevorgang sicher beendet ist.

edit: das lässt sich übrigens viel eleganter lösen: es gibt im UART-STATUS-register (UST?? weiss nimmer) ein bit das anzeigtz ob das datenregister leer ist...