Hi damaltor,

udre.. das müsste doch auch schreibbar sein. ...
Nein, siehe mein Beitrag weiter oben:
So jetzt zum Fall UCSRA (= USART Control and Status Register A):
Auf Seite 154 steht, dass nur das Flag TXC (=USART Transmit Complete, Bit #6) von den anwesenden IRQ-Flags les- UND schreibbar ist! (D.h., dass man die anderen {IRQ-}Bits #7, 5 - 2!) durch Schreiben NICHT verändern kann!
Die Bits 1 und 0 sind wieder read/write! Sie haben ja auch nichts mit IRQ's zu tun!

... es wird doch 1, wenn udr leer ist, ...
korrekt! Und das nutzt man dann in der Schleife bei SerWrite aus!
Z.Bsp. in meiner abgespeckten Version:
Code:
void SerWrite(unsigned char data)
{ while(!(UCSRA & 0x20));
  UDR = data;
}
"0x20" könnte man auch durch "(1<<UDRE)" ersetzen! (Das sieht dann professioneller aus!)

... und kann manuell wieder gelöscht werden, oder?
NEIN, siehe oben! Das Löschen geht automatisch, d.h. der Controller macht's!
Sonst würde ja obiger Code nicht funktionieren!

cu Helmut