also,

das UDR ist nur n Register, ne Speicherzelle könnte man sagen,
die genau ein Byte fasst.
Bevor man es verwendet muss man aber erst die
UART, also die serielle Schnittstelle konfigurieren.
Üblicherweise ist die Konfiguration
z.B. 19200,8,n,1
19200 ist die Baudrate, also die Übertragungsgeschwindigkeit
8 ist die Paketlänge, also 8 BIT, nicht Byte, also 1 Byte
n steht für "no parity" also kein Paritätsbit
1 steht für ein Stopbit.

ist die UART konfiguriert stellt sie verschiedene Flags
Interrupts und Register bereit, die man verwenden
kann.
Da gibts z.B. das RXC also das receive complete Flag,
es zeigt an, dass ein Zeichen ganz empfangen wurde.
Es kann auch ein entsprechender Interrupt ausgelöst
werden, das währe dann der URXC-Interrupt.
Äquivalent gibts das auch zum Senden,
da nennt sich das dann TXC, also Sendeübertragung complete-Flag
und UTXC also Zeichen gesendet Interrupt.

Wird nun ein Zeichen empfangen wird dies in der
UDR-Speicherstelle abgelegt und kann dort dann ausgelesen
werden. Die Anweisung währe dann:
beliebige_variable = UDR
Zum Senden schreibt man einfach ein Zeichen, also ein
Byte in das gleiche Register, also:
UDR=beliebiges_byte

das wars auch schon.