Forum: Mikrocontroller und Digitale Elektronik DDRB = 8|16 was ist damit gemeint


von Frank (Gast)


Lesenswert?

wie muss ich diese Codezeile verstehen?


ich verwende immer Binär oder Hex. Das scheint eine weitere Variante zu 
sein.

von auch Frank (Gast)


Lesenswert?

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?

von Frank (Gast)


Lesenswert?

in Binäre

von horstl (Gast)


Lesenswert?

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.

von auch Frank (Gast)


Lesenswert?

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?

von Rolf Magnus (Gast)


Lesenswert?

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.

von Dirk K. (dekoepi)


Lesenswert?

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.

von PittyJ (Gast)


Lesenswert?

Der | ist ein 'oder' Operator. Die beiden Zahlen werden verodert, und 
das Ergebnis zugewiesen.

Funktioniert ähnlich wie z.B. 'plus'
a=4+5;

von Ingo L. (corrtexx)


Lesenswert?

Dirk K. schrieb:
> DDRB = (1<<3) | (1<<4);
Ich bevorzuge die Variante:
1
DDRB = (1<<PB3) | (1<<PB4);

von Rolf Magnus (Gast)


Lesenswert?

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);

von Norbert (Gast)


Lesenswert?

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? ;-)

von Dirk K. (dekoepi)


Lesenswert?

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.

von Norbert (Gast)


Lesenswert?

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

von Jaxom (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

> 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

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.