mikrocontroller.net

Forum: Compiler & IDEs Anfängerfrage zum bitweise shiften


Autor: josch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich bin ziemlich neu, was das Basteln mit Mikrocontrollern anbelangt.
Ebenso neu ist mir auch das Programmieren in C.
Ich hoffe auch, meine Frage ist nicht allzu dämlich.
Sie bezieht sich eigentlich auf den Artikel "Programmieren in C"
Da steht bei der Inbetriebnahme des Timers 0 mit 1/64 des Taktes die
Zeile:

outp ((1<<CS02) | (1<<CS00), TCCR0);

was genau passiert den in dem Ausdrück 1<<CS02 bzw. 1<<CS00?

Meine Recherche hat ergeben, dass da 0001 um CS02 nach links verschoben
wird. Aber was steht in CS02 drin? Das ist doch eigentlich nur ein Bit.
Wie komme ich denn hinterher auf das geforderte 0011?

schlagt mich, schimpft mich aus... aber bitte verratet's mir

Gruss josch

Autor: KoF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
x << y

x = der zu schiftende zahlenwert (oder variable)
y = der zahlenwertwert um den geschiftet werden soll ( ebenfalls auch
eine variable möglich)

was nun in der variable CS02 drin steht, weiß ich nicht ( will es
ehrlich gesagt momentan auch gar nicht wissen) aber wenn du es wissen
willst, dan lass dir die variable doch einfach mal mit nem printf
ausgeben ;)

mfg KoF

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
outp ist deprecated! Nicht mehr verwenden!

http://www.nongnu.org/avr-libc/user-manual/deprecated.html

Die Erklärung von KoF ist ganz gut, und was mag wohl in den "Makros"
drin stehen? Warscheinlich die Nummer des Bits, welches den
zugewiesenen Namen (CS00  CS02  ...) repräsentiert. Man könnte auch
die "nummer" des Bits angeben, sowas bezeichnet man aber als magic
number, da sich eine solche Zeile:

PORTA = (1 << 3) | (1 << 7) | (1 << 1);

sehr schwer liest.

Gruß,
Patrick...

Autor: josch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke schonmal für die Antwort

So richtig weiss ich es aber immer noch nicht.

wenn y ein Bit (in einem Register) ist, dann stellt der Ausdruck
"1<<y" doch ein Umschalten des Bits von 0 nach 1 bzw. umgekehrt dar.
Oder liege ich da falsch?
Was ist denn dann der Unterschied zu beispielsweise "y=!y"?
Das ginge doch eigentlich genauso.

Gruss josch

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, es ist kein Umschalten.  y ist kein Bit, sondern die Nummer
eines Bits.  Mit 1 << y erhälst Du den dazugehörigen Zahlenwert.
Bit 0 z. B. ergibt 1 << 0, also 1.  Bit 1 ergibt 1 << 1, also 2.
usw. usf.

Autor: josch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arrgh, Danke - jetzt hab ich's
Da stand aber einer auf der Leitung :)

Allerdings ist dann da ein kleiner Fehler in dem Artikel.
Unter
http://www.mikrocontroller.net/articles/c/Timer_Co...
heisst es für 1/64-tel des CPU Taktes wie oben geschrieben:
outp ((1<<CS02) | (1<<CS00), TCCR0);

Das wäre dann doch aber der Code für 1/1024-tel, da ich TCCR0 mit
00000101 beschreibe.
Naja, wie dem auch sei - jetzt kann ich gut schlafen :)

Danke für Eure Geduld
josch

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zwar sind die Codierungen nicht bei allen AVRs gleich (namentlich der
ATmega64/128 weicht ab), aber hier scheint in der Tat ein Fehler
vorzuliegen.  1/64 wäre (1 << CS01) | (1 << CS00).

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.