Eine Übertragung wird dadurch gestartet, indem der Sendebuffer mit den zu sendenden Daten geladen wird. Die CPU kann den Sendebuffer laden, indem in die UDR I/O-Speicherzelle geschrieben wird. Die gebufferten Daten im Sendebuffer werden in das Schieberegister transportiert, wenn das Schieberegister zum Senden eines neuen Frames breit ist. Das Schieberegister wird geladen, wenn es im idle Zustand ist (d.h. keine laufende Übertragung) oder unmittelbar nachdem das letzte Stoppbit vom vorherigen Frame übertragen wurde. Wenn das Schieberegister mit neuen Daten geladen wird, wird ein kompletter Frame mit einer Rate, die durch des Baudratenregisters, das U2X Bit oder den XCK Takt abhängig vom Betriebsmodus vorgegeben wird, übertragen.
Das folgende Programmbeispiel zeigt eine einfache USART Sendefunktion, die auf dem Pollen des Data Register Empty (UDRE) Flags basiert. Wenn Frames mit weniger als 8 Datenbits verwendet werden, werden die MSB, die ins UDR geschrieben wurden, ignoriert. Die USART muss initialisiert werden, bevor die Funktion genutzt werden kann. Im Assemblercode wird vorausgesetzt, dass die zu sendenden Daten im Register R16 stehen.
Codebeispiel Senden
Die Funktion wartet bis der Sendebuffer leer ist, indem es das UDRE Flag abfragt, bevor er mit den neuen zu sendenden Daten geladen wird. Wenn der Data Register Empty Interrupt verwendet wird, schreibt die Interruptroutine die Daten in den Sendebuffer.