Sehe gerade noch was:
1 | while(UCSR0A !=(UCSR0A|0x20));
|
Was soll das eigentlich machen?
Im Tutorial sehe eher sowas wie:
1 | while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich
|
Das Problem mit Deinem Code ist folgendes:
1. Es wird wegen
UCSR0A gelesen.
Nehmen wir an es sei Bit 0x20 gesetzt. Das Datenregister ist also leer
und kann neue Daten aufnehmen. Wir lesen also 0x20
2. Es wird wegen
nochmal UCSR0A gelesen. Wir lesen wieder 0x20. Die Bedingung hat sich
in der Zwischenzeit nicht geändert.
3. Wir testen auf Ungleichheit. 0x20 ist nicht ungleich 0x20 also
bleiben wir in der Schleife.
Das funktioniert nicht!
Es muss eher:
1 | while(!(UCSR0A & 0x20));
|
sein.
Gruss
Oops