-.- wozu denn ne lib bitte <_< (alleine schon fürs UART ne lib *grusel*)

while(!ready to send) ;
dataregister = meinbyte;

oder

while(!byte received);
meinbyte = dataregister;

FERTIG!

deine aussage du wärst auf verschiedene codeteile gestossen ... GLAUB ich dir einfach mal nicht .... nimm dir BITTE das datenblatt und lies es da steht alles drin, sauber erklärt SOGAR MIT BEISPIELEN!!!

UART arbeitet genauso, bis auf die initialisierung die man in einem 4 zeiler erledigen kann,

while(!ready to send) ;
dataregister = meinbyte;

oder

while(!byte received);
meinbyte = dataregister;


ausserdem gibt es noch für UART interrupts, damit erleichtert ma sich ungemein das verteilen der prozessorlast und die habe ich bisher in keiner UART lib gesehen (find ich eigentlich schade)

I2C sehe ich ein, da ist senden und empfangen schon etwas komplizierter