Forum: Mikrocontroller und Digitale Elektronik AVR C++ GCC Binärcode anstatt DEZ


von Jo Mc (Gast)


Lesenswert?

Hallo,

Wenn ich einselne Bits eines Registers beschrieben möchte, dann mach ich 
es bisher immer so:
PORTD = (1<<1)|(0<<2)|(0<<3)|(1<<4)|(0<<5)|(1<<6)|(1<<7);

gibt es eine einfachere Möglcihkeit?
z.b.
PORTD = Binär(1001011) ???

Gruß Johannes!

von Matthias L. (Gast)


Lesenswert?

>gibt es eine einfachere Möglcihkeit?
ja, diese:
1
PORTD = 0b1001011;

Die ist zwar einfacher, aber schlechter lesbarer. Bleibe lieber bei 
obiger Klammernkonstruktion!

von Michael Wilhelm (Gast)


Lesenswert?

>Die ist zwar einfacher, aber schlechter lesbarer. Bleibe lieber bei
>obiger Klammernkonstruktion!

Die würde ich dann aber noch etwas lesbarer gestalten, z. B.:
PORTD = 1 << PD2;

Das macht bei einem Portregister noch nichts, aber wenn es an 
Timerregister o. ä. geht ist es hilfreicher.

MW

von Matthias L. (Gast)


Lesenswert?

Noch ein Hinweis:
1
PORTD = 0b1001011;
Hier kommt das höchste Bit IMMER zuerst!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Da gibt es tausend Möglichkeiten ein Byte zu beschreiben,
aber das ist sicher eine der am wenigsten schönen:
>PORTD = (1<<1)|(0<<2)|(0<<3)|(1<<4)|(0<<5)|(1<<6)|(1<<7);

- vor lauter Sonderzeichen sieht man die eigentliche Information nicht
- einzelne Bits (Bit 0) sind ausgelassen (und damit implizit 0)
- die Reihenfolge der Bits entspricht nicht der üblichen Leserichtung

>PORTD = (1<<7)|(1<<6)|(1<<4)|(1<<1);
ist das gleiche

>PORTD = 0b11010010;
ist das gleiche

>PORTD = 0xD2;
ist das gleiche

und jedes Mal schneller lesbar.
Ich bevorzuge bei solchen statischen Zuweisungen die Hex-Schreibweise, 
das muss man auch nur 1 mal lernen, danach kann man sich 
Bitkombinationen viel leichter merken ;-)

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.