mikrocontroller.net

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


Autor: Alexander Schmeil (knut740)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Geek (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alexander Schmeil (knut740)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alexander Schmeil (knut740)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß
(3<<UCSZ0)
 und
((1<<UCSZ1) | (1<<UCSZ0))
 im Endeffekt ein und dasselbe sind.
Ansonsten, ein Stift und ein Stück Papier wirken manchmal Wunder.

CU

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.