Hi,
bin im Moment mit der UART Schnittstelle vom Atmega16 am
experimentieren. Ich programmiere unter WinAvr.
Bin jetzt auf ein Problem gestoßen und habe deshalb mal ne Allgemeine
Frage:
Ich frage in meinem Programm den Zustand des UART Empfangsregisters ab
nachdem ein Taster gedrückt wurde. Die Abfrage geschieht per Polling:
1 | while(!(UCSRA & (1<<RXC)))
|
2 | {
|
3 | //// Auf Zeichen warten
|
4 | }
|
5 | // lese zeichen ein und gebe es wieder aus
|
Der µC hat doch nur ein 8 Bit Register zum Puffern der Empfangenen Daten
also kann er doch während einer Transmission vom PC zum µC auch nur ein
Byte annehmen ? Wenn ich also in meinem Terminal Programm eine '0'
sende, dann sendet das Programm über die Schnittstelle eine hex 30 und
eine hex 0A für den Zeilenvorschub, aber der µC dürfte doch nur die hex
30 bemerken und dann "dicht" machen, bis das Byte vom Empfangsregister
ausgelesen wurde.
Tatsächlich merkt er trotzdem das insgesamt zwei Byte gesendet wurden,
denn wenn ich den Taster wieder drücke ohne noch etwas gesendet zu haben
dann springt er wieder über die Warteschleife als ob wieder etwas
gesendet wurde.
Also wenn ich '0' eingebe springt er 2x über die Warteschleife
wenn ich '012' eingebe springt er 4x drüber.
Wie merkt der µC die Anzahl der Bytes ?
Warscheinlich hab ich wohl nur nen krassen denkfehler.....
Gruß markus