Forum: Mikrocontroller und Digitale Elektronik Baudrate UART


von Udo (Gast)


Lesenswert?

Hallo,

kann mir jemand die folgenden Programmzeilen erkären?

/* baud rate*/
UBRR0H = (unsigned char) (UBRR>>8);
UBRR0L = (unsigned char) UBRR;

Danke und Gruß

von hahgeh (Gast)


Lesenswert?

In das (wahrscheinlich) 8-bit-Register UBRR0H wird das obere Byte vom 
(wahrscheinlich) 16-bit-Register UBRR geladen. In das Register UBRR0L 
die andere Hälfte.
>>8 verschiebt um 8 bits nach links und (unsigned char) läßt nur die unteren 8 bit 
übrig.

von unsichtbarer WM-Rahul (Gast)


Lesenswert?

">>8" verschiebt um 8 bits nach links und (unsigned char) läßt nur die 
unteren 8 bit übrig.

Nö, es verschiebt nach rechts...
Sonst stimmt es aber.

von Udo (Gast)


Lesenswert?

Hat das Register nicht nur 12Bit?

von johnny.m (Gast)


Lesenswert?

Das sind zwei 8-Bit-Register (UBRR0H und UBRR0L), macht zusammen 16 Bit. 
Dass von den 16 Bit nur 12 verwendet werden, ist in dem Falle Wurscht, 
da die 4 MSB von UBRR0H nicht anderweitig belegt sind und eh mit Nullen 
beschrieben werden. Der Wert von UBRR muss dazu natürlich im gültigen 
Bereich liegen.

von FBI (Gast)


Lesenswert?

"die 4 MSB von UBRR0H nicht anderweitig belegt"

Das stimmt nicht unbedingt. Siehe:
http://www.atmel.com/dyn/resources/prod_documents/doc2502.pdf
Seiten 163/167/169.

CU

von johnny.m (Gast)


Lesenswert?

Im Prinzip richtig, bei einigen AVRs (Mega16/8515/8535) teilen sich das 
UBRRH und UCSRC dieselbe I/O-Adresse. Trotzdem muss das MSB beim Zugriff 
auf UBRRH 0 geschrieben werden, so dass sich am Prinzip nichts ändert 
(also 4 MSB 0). Da im ursprünglichen Posting aber von UBRR0H und UBRR0L 
die Rede ist, handelt es sich offensichtlich um einen AVR mit zwei 
UARTs. Und bei denen trifft die Doppelbelegung nicht zu.

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.