Der oben beschriebene Algorithmus soll die Bytefolge "0x10,0x20,0x30"
128 (0x80) mal über die UART-Schnittstelle senden.
Das Problem in der Funktion "PrintChar" ist, es wird geprüft ob das
UDRE-Bit 1 ist, wenn nicht wird die Funktion verlassen. Das Funktioniert
wunderbar mit dem ersten Aufruf, dass Byte "0x10" wird gesendet und das
UDRE-Bit wird intern auf 0 gesetzt. Danach kommt es zum zweiten Aufruf
der Funktion. Jetzt liegt aber die Situation vor, dass das Zeichen (Byte
0x10) noch nicht vollständig von der UART-Hardware verarbeitet wurde und
somit richtigerweise das UDRE-Bit noch 0 ist. Die Funktion wird
demzufolge ohne das beschreiben des UDR-Registers verlassen.
Richtig währe es, wenn in einer while-Schleife so lange gewartet wird,
bis ein Senden das vorangegangenen Byte erfolgte (Siehe meinen Quellcode
- uartTXByte).
Noch eine Frage warum verwendest Du den Begriff "volatile = flüchtig,
vergänglich"? In C werden alle Variablen die in einer Funktion
initialisiert werden noch dem Verlassen wieder gelöscht, aus dem RAM
entfernt.
Bis dann Jens
www.SynaSys.com