mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UCSRnC = (1<<USBS)|(3<<UCSZ0);


Autor: Großes Fragezeichen (112)
Datum:

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

Autor: Jean Player (fubu1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Großes Fragezeichen schrieb:
> möchte ich also USB00, UCSZ01 und UCSZ00 auf 1 setzen, könnte ich dann
> auch einfach schreiben:
>
> UCSR0C=(5<<UCSZ0)

Nein, dann musst du UCSR0C |= (7<<UCSZ0) scchreiben !

Gruß

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Großes Fragezeichen schrieb:

> 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.

Im Grunde ja.
Wenn du dir auf Binärebene überlegst, was

     3 << UCSZ0

eigentlich macht, ist auch klar warum.

Autor: Großes Fragezeichen (112)
Datum:

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

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Großes Fragezeichen schrieb:
> Die UCSR0C |= (7<<UCSZ0) wäre nötig, weil das Bit 0 nicht UCSZ0 ist,
> sondern UCPOL0, richtig?

nö weil binär 111 nunmal im dezimalen 7 ist und nicht 5...

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.