3<< Druckfehler oder tiefere Bedeutung?

OP #850787
Lesenswert?

Hallo,
bei der USART-Initialisierung liest man im Manual

  UCSRC = ....... (3<<UCSZ0)  8 data 2 stop-bit

Mit der nach links zu verschiebenden 3  - ist das eine neue Erfindung 
von C oder bloß ein Druckfehler?
Wie müßte man denn schreiben, wenn man nur ein Stopbit wollte: 2<< ?

Viele Grüße
Alexander
Gast #850813
Lesenswert?

mit << kannst du alles nach links schieben, nicht nur einsen

da du ja scheinbar ein Manual hast kannst du ja nachschauen was an der 
Position UCSZ0 für Bits stehen ...

na gut, ich verrat's: es ist die Zahl der übertragenen Bits, 3 steht für 
8Bit
OP #850982
Lesenswert?

Hallo Walter

Walter wrote:
> mit << kannst du alles nach links schieben, nicht nur einsen
>
und wie kriege ich das dann sinnvollerweise unter? Schließlich handelt 
es sich doch um nur um einzele Bits mit den Werten 0 oder 1 in dem 
Register UCSRC, nämlich UCSZ0=Bit 1 und UCSZ1=Bit 2. Und wenn man sich 
vorstellen könnte, es würden halt drei mal eine eins verschoben? Geht 
nicht, denn das dritte der Bits sitzt in einem ganz anderen Register 
(UCSRB).
Ach, die Zuweisung mit den Werten der Bits kann es auch nicht sein, denn 
Bit 1 und Bit 2 gibt 6.
Ist doch sehr mysteriös, oder? Aber vielleicht funktioniert es trotzdem?

> da du ja scheinbar ein Manual hast kannst du ja nachschauen was an der
> Position UCSZ0 für Bits stehen ...
>
> na gut, ich verrat's: es ist die Zahl der übertragenen Bits, 3 steht für
> 8Bit

Hier ist das erste Ergebnis meiner Zusammenstellung (ich habe mir die 
Mühe gemacht, weil ich demnächst etwas in das Programm schreiben muß). 
Sind die Ausdrücke falsch?

UCSRC = (1<<UCSZ1) |  (1<<UCSZ0)   = 8 bits  , außerdem noch
UCSRB = (0<<UCSZ2)                 = 8 bits

oder auch UCSRC |= 134 für 8 bit, parity disabl, 1 stopbit.

Je mehr man sich hineinvertieft, desto unübersichtlicher wird es (wann 
muß URSEL sein = 1, wann  = 0?). Ich werde den ganzen Kram wohl von 
einem getesteten Programm abschreiben (möglichst ohne 3<<).

Viele Grüße
Alexander
Gast #850991
Lesenswert?

Hi,

kann Geek nur voll zustimmen.
Wenn Du Dir das Ganze mal genau angesehen hättest (insbesondere z.B. 
auch wie UCSZ0 und UCSZ1 definiert sind), wärst Du vielleicht auch 
selbst drauf gekommen, daß
1
(3<<UCSZ0)
 und
1
((1<<UCSZ1) | (1<<UCSZ0))
 im Endeffekt ein und dasselbe sind.
Ansonsten, ein Stift und ein Stück Papier wirken manchmal Wunder.

CU

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