wie muss ich diese Codezeile verstehen? ich verwende immer Binär oder Hex. Das scheint eine weitere Variante zu sein.
Frank schrieb: > ich verwende immer Binär oder Hex. Das scheint eine weitere Variante zu > sein. Und was 8|16 in Binär oder Hex?
Frank schrieb: > wie muss ich diese Codezeile verstehen? > > > ich verwende immer Binär oder Hex. Das scheint eine weitere Variante zu > sein. Kümmer dich mal mehr um dezimal. Bissl ausführlicher als in deinen Beiträgen.
auch Frank schrieb: > Frank schrieb: > ich verwende immer Binär oder Hex. Das scheint eine weitere Variante zu > sein. > > Und was 8|16 in Binär oder Hex? Ich hatte ein "bedeutet" vergessen. > Und was BEDEUTET 8|16 in Binär oder Hex?
Frank schrieb: > wie muss ich diese Codezeile verstehen? ich verwende immer Binär oder Hex. Sie ist gleichbedeutend mit:
1 | DDRB = 0x8|0x10; |
> Das scheint eine weitere Variante zu sein.
Ja, dezimal ist eine weitere Variante, Zahlen in C anzugeben. Aber wo
ist jetzt das Problem? Du wirst doch wissen, wie das Dezimalsystem
funktioniert.
Vielleicht lernt der TE ja noch. Am Einfachsten ist es, sich mal die Darstellung in anderen Zahlensystemen anzusehen. Hexadezimal hatten wir oben schon. Viel deutlicher wird das dann so:
1 | DDRB = 2^3 | 2^4; |
oder
1 | DDRB = (1<<3) | (1<<4); |
Da sieht man dann direkt, welche Pins als Ausgang gesetzt werden.
Der | ist ein 'oder' Operator. Die beiden Zahlen werden verodert, und das Ergebnis zugewiesen. Funktioniert ähnlich wie z.B. 'plus' a=4+5;
Ingo L. schrieb: > Dirk K. schrieb: >> DDRB = (1<<3) | (1<<4); > Ich bevorzuge die Variante: > DDRB = (1<<PB3) | (1<<PB4); Dann solltest du aber eigentlich konsequent sein und schreiben:
1 | DDRB = (1<<DDB3) | (1<<DDB4); |
Dirk K. schrieb: > Vielleicht lernt der TE ja noch. Am Einfachsten ist es, sich mal die > Darstellung in anderen Zahlensystemen anzusehen. Hexadezimal hatten wir > oben schon. Viel deutlicher wird das dann so: >
1 | DDRB = 2^3 | 2^4; |
> oder >
1 | DDRB = (1<<3) | (1<<4); |
> > Da sieht man dann direkt, welche Pins als Ausgang gesetzt werden. Bei '2^3' und '2^4' bist du dir sicher? ;-)
Gib das mal in deinen Taschenrechner ein. Das Ergebnis ist verblüffend! ;) Im Programm würde ich so einen Quatsch aber nicht schreiben, sondern die SHL-Variante nehmen. Weil die ganz offensichtlich einfacher zu rechnen ist von einem binären Prozessor - eben simpelstes Shift Left.
Dirk K. schrieb: > Gib das mal in deinen Taschenrechner ein. Das Ergebnis ist verblüffend! > ;) Nicht ablenken! Da ein Taschenrechner nur extrem selten ein Data Direction Register auf dem Tastenfeld hat, ist das zwar eine schöne Ausrede, mehr aber auch nicht. ;-)
Dirk K. schrieb: > Im Programm würde ich so einen Quatsch aber nicht schreiben, sondern die > SHL-Variante nehmen. Weil die ganz offensichtlich einfacher zu rechnen > ist von einem binären Prozessor - eben simpelstes Shift Left. Selbst wenn das Ergebnis von 2^3 auf dem Taschenrechner irgendwas mit dem ^-Operator in C zu tun hätte, wäre diese Aussage falsch.
> DDRB = 8 | 16
Bedeutet: Setze das DDRB Register auf den Wert 8 oder 16 :-)
Spass Beiseite, die beiden Zahlen werden mit der binären ODER Funktion
verknüpft. In diesem Fall ergibt das den Wert 24. Es werden zwei Bits
gesetzt, die anderen werden gelöscht.
1 | 8 -> 00001000 |
2 | 16 -> 00010000 |
3 | ============== |
4 | 00011000 = 24 |
Dirk K. schrieb: > DDRB = 2^3 | 2^4; Ich hoffe, das schreibt keiner hier ab, denn das ist grottenfalsch. In C ist der Operator '^' ein Exclusiv-Or und kein Potenzzeichen. Da kommt etwas ganz anderes raus. Du meintest:
1 | DDRB = (1 << 3) | 1 << 4); |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.