Forum: Compiler & IDEs 3<< Druckfehler oder tiefere Bedeutung?


von Alexander S. (knut740)


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

von Walter (Gast)


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

von Geek (Gast)


Lesenswert?

@Alexander:
Wenn Dir schon die Grundlagen von C Probleme bereiten, empfehle ich ein 
Buch über die Grundlagen von C. Sonst wirst Du noch viel Schwierigkeiten 
bekommen.

von Alexander S. (knut740)


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

von Alexander S. (knut740)


Lesenswert?

(möglichst ohne 3<<).
>
Nun gut, wenn  <<3 heißt, bit 0 und bit 1 = zusammen =3 werden um eins 
nach links verschoben und rechts wird eine Null aufgefüllt (UCPOL soll 
ja = 0 sein),
dann soll mir das recht sein.

mfg
Alexander

von ... (Gast)


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

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.