UART PC -> µC Zeichenpuffer

OP #2408985
Lesenswert?

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
Gast #2408998
Lesenswert?

Erst wird das Schieberegister gefüllt, wenn es voll ist wird es ins 
Empfangsregister verschoben.
Nun ist das Schieberegister wieder frei für ein neues Zeichen.
Der Controller hat nun 1 Zeichen zeit es aus dem Empfangsregister 
abzuholen.
Falls das nicht passiert wird das bei einem vollen Schieberegister das 
Empfangsregister überschrieben und du hast ein Byte verloren.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren