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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.