UCSRnC = (1<<USBS)|(3<<UCSZ0);

OP #1862802
Lesenswert?

Hallo Forum,

die Zeile:

UCSR0C = (1<<USBS0)|(3<<UCSZ00);

bedeutet doch folgendes:
(1<<USBS) // es werden zwei Stop-Bits verwendet

(3<<UCSZ00) // sollte identisch sein mit ((1<<UCSZ00) | (1<<UCSZ10)), um 
8 Bits zu senden

Wenn man nun (3<<UCSZ0) schreibt, setzt das Programm dann automatisch 
beginnend bei UCSZ00 eine 1 und bei dem nächstfolgenden Bit des 
Registers UCSR0C (hier laut Datenblatt UCSZ01) ebenfalls eine 1. oder 
ist dies nur eine kurzschreibweise für die Anleitung des Datenblattes?

Im konkreten Fall besitzt das Register UCSR0C folgenden Aufbau:
UMSEL01 UMSEL00 UPM01 UPM00 USBS0 UCSZ01 UCSZ00 UCPOL0

möchte ich also USB00, UCSZ01 und UCSZ00 auf 1 setzen, könnte ich dann 
auch einfach schreiben:

UCSR0C=(5<<UCSZ0)

???
mfg
OP #1863238
Lesenswert?

...also irgendwie stehen eure beiden Antworten leicht im Gegensatz 
zueinander.

Die UCSR0C |= (7<<UCSZ0) wäre nötig, weil das Bit 0 nicht UCSZ0 ist, 
sondern UCPOL0, richtig?

Dann verstehe ich aber nicht, warum das Codebeispiel des Datenblattes 
das Beipiel mit (3<<UCSZ00) verwendet, weil dort gilt der selbe 
Registeraufbau, auch dort beginnt das Register mit UCPOL0 als 0-tem 
Bit...

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