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.
#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.

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