Was mir auffällt:
- UART_BAUD_RATE ist Argument des Makro und Makro selbst! Keine Ahnung, was das macht... Ausserdem ist F_OSC überflüssig. besser (zumindest klarer) ist
#define UART_BAUD_CALC(baud) ((F_CPU)/((baud)*16L)-1)- Das #ifndef F_CPU würd ich rausnehemen. F_CPU sollte an einer Stelle definiert sein. Bei mehreren Definitionen gibt es dann eine Warnung, und man kann alles so bauen, daß es nur noch _ein_ zentrales Define gibt. Auf unterschiedliche Werte zu definen wäre auch Käse.
- Der Kommentar zu PortB und die Befehle passen nicht.
- Ist Port TxD auf OUT?
- Bein Setzen von UCSRX besser = anstatt |=
- Beim Setzen von UCSZX aufspalten in UCSZ0 und UCSZ1. So gehst du implizit davon aus, daß die Bits nebeneinander stehen.
- Nimm die {} hinter dem while weg. Das mutet an, als gehöre der Block zum while (was er nicht tut!)
- main() wird niemals nicht aufgerufen! Wenn du das tust, initialisierst du den UART neu, während mit Sicherheit eine Sendung im Gange ist. Beim Debuggen ist die Sendung allerdings schon fertig, daher tritt der Fehler dort nicht zu Tage.
Lesezeichen