Forum: Mikrocontroller und Digitale Elektronik UART PC -> µC Zeichenpuffer


von Markus W. (kornbanane)


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
von syn_error (Gast)


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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.