UART UBRR setzen ATMEGA

Gast #3545079
Lesenswert?
• ▲
▼
Hallo zusammen,

ich hab mal wieder ne Frage. Da ich mich gerade mit UART beschäftige, 
habe ich mir das Tutorial "Der UART angesehen. Dabei ist mir ein 
Codeschnipsel aufgefallen den ich nicht kappiere.



1
UBRRH = UBRR_VAL >> 8;
2
  UBRRL = UBRR_VAL & 0xFF;

Wenn ich das richtig verstanden habe und richtig gerechnet habe, müsste 
ein UBRR = 26 rauskommen.

Die erste Zeile dieses Codes verstehe ich überhaupt nicht.
In der zweiten Zeile werden alle Bits auf 1 gesetz, aber warum.

Ich bin noch ein Anfänger in Sachen Mikrocontroller.
Gast #3545086
Lesenswert?
• ▲
▼
Christian schrieb:
> Ich bin noch ein Anfänger in Sachen Mikrocontroller.

Das hat nichts speziell mit Mikrocontroller zu tun, sondern es sind 
grundlegende C Operatoren. Guck dir mal Dinge wie die bitweises UND 
Operation und Rechts-Shift an, z.B. in 
http://de.wikibooks.org/wiki/C-Programmierung:_Ausdr%C3%BCcke_und_Operatoren

> In der zweiten Zeile werden alle Bits auf 1 gesetz, aber warum.
Werden sie nicht. Du darfst UND nicht mit ODER verwechseln.
Gast #3545091
Lesenswert?
• ▲
▼
Danke für die schnelle Antwort.

Da ich C nicht perfekt behersche, habe ich das noch nicht gewusst.
Jetzt schon.

Was die zweite Zeile angeht, hab ich das & übersehen.
Sehe ich das richtig, dass der Wert gleich bleibt und es nur darum geht 
Dieses Register zu beschreiben?
#3545117
Lesenswert?
• ▲
▼
Christian schrieb:
> Sehe ich das richtig, dass der Wert gleich bleibt und es nur darum geht
> Dieses Register zu beschreiben?

Nein, es geht darum die unteren 8Bit von einem 16Bit-Wert zu erhalten.

Christian schrieb:
> Könnte ich eigentlich auch schreiben
> UBBR0H = BAUD_Wert >> 8;
>    UBRR0L = BAUD_Wert;

Nein, zum einen ist UBRR nicht der 'Baud_Wert' sondern 
(Taktfrequenz/(BAUD_Wert*16))-0.5 und zum anderen kommt es auf den 
Compiler an, was passiert wenn Du einem 8Bit-Register UBBR0L einen 
16Bit-Wert zuweist.
Gast #3545178
Lesenswert?
• ▲
▼
Die Aufteilung in High- und Lowregistern ist bei einem aktuellen gcc 
nicht mehr nötig. Es reicht ein einfaches:

UBRR0 = UBRR_VAL;

Beschäftige dich trotzdem mit Bitoperationen wie & und >>, sie sind dein 
täglich Brot.
Mal dir auf einen Zettel, was bei diesen Operationen passiert.

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.