Forum: Mikrocontroller und Digitale Elektronik Eingänge mit Binärcode


von Johannes A. (kleinerkeiler96)


Lesenswert?

hallo...
ist es möglich, dass ich statt (PINB & (1<<PINB2) | (1<<PINB3));
es auch als binärcode schreiben kann.? halt 0b00001100


danke..
von Klaus W. (mfgkw)


Lesenswert?

abgesehen davon, daß in 0b00001100 das PINB nicht enthalten ist, deine 
zwei Ausdrücke also nicht gleichwertig sind: ja, es geht.

Daß es meistens Unsinn ist, erwähne ich jetzt nicht.
von Krapao (Gast)


Lesenswert?

Im Prinzip ja.

Wenn es der z.B. GCC ist, denn der kennt Binärschreibweise.

Und wenn du mit 0b00001100 den Teil (1<<PINB2) | (1<<PINB3) ersetzen 
willst, nicht den Teil mit dem PINB &...

Und wenn du bei jeder Fragen in der du solchen Code benutzt Hinweise 
brauchst, dass diese Schreibweise aus mehreren leicht einsichtigen 
Gründen ungünstig ist.
von holger (Gast)


Lesenswert?

>ist es möglich, dass ich statt (PINB & (1<<PINB2) | (1<<PINB3));
>es auch als binärcode schreiben kann.? halt 0b00001100

Wenn der Compiler nicht meckert geht das.
Ich würde das aber so schreiben:

(PINB & ((1<<PINB2) | (1<<PINB3)));
von Cyblord -. (cyblord)


Lesenswert?

1
PINB=0b00001100;
von spess53 (Gast)


Lesenswert?

Hi

>ist es möglich, dass ich statt (PINB & (1<<PINB2) | (1<<PINB3));
>es auch als binärcode schreiben kann.? halt 0b00001100

Ja. Aber warum etwas lesbares durch Keilschrift ersetzen?

MfG Spess
von Johannes A. (kleinerkeiler96)


Lesenswert?

und wie kann man das dann schreiben.?


if (PINB & (0b00001100);

so oder wie
von Klaus W. (mfgkw)


Lesenswert?

kommt drauf an, was du erreichen willst.
von Johannes A. (kleinerkeiler96)


Lesenswert?

spess53 schrieb:
> Ja. Aber warum etwas lesbares durch Keilschrift ersetzen?

um Grundkenntnisse aufzubessern ;)
von Johannes A. (kleinerkeiler96)


Lesenswert?

Klaus Wachtler schrieb:
> kommt drauf an, was du erreichen willst.

if (PINB & (0b00001100);

wenn pb2 und 3 auf high sind, dass ich dann ein eingang habe
von Klaus W. (mfgkw)


Lesenswert?

Johannes Adler schrieb:
> um Grundkenntnisse aufzubessern ;)

Die wichtigste Grundkenntnis: erst muß man selbst wissen, was man will.

Die zweite: wenn man andere fragt, kann man wenigstens klar sagen, was 
man vorhat.
Dann müssen nicht alle rumraten, das hilft eh nix.
von Klaus W. (mfgkw)


Lesenswert?

Johannes Adler schrieb:
> Klaus Wachtler schrieb:
>> kommt drauf an, was du erreichen willst.
>
> if (PINB & (0b00001100);
>
> wenn pb2 und 3 auf high sind, dass ich dann ein eingang habe

egal, wie die anderen Pins stehen? Oder müssen die 0 sein?
Sind überhaupt alle Pins von B Eingang?
von Klaus W. (mfgkw)


Lesenswert?

PS: schon mal das Tutorial gesehen?
Da steht sowas drin.
von Johannes A. (kleinerkeiler96)


Lesenswert?

ich möchte ein codier schalter programmieren... je nach dem wie er steht 
sind bestimmte pins frei...

ich würde fast denken, wenn man diese if Anweisung mit binärcode 
schreibt, geht es schneller
von Johannes A. (kleinerkeiler96)


Lesenswert?

Klaus Wachtler schrieb:
> egal, wie die anderen Pins stehen? Oder müssen die 0 sein?
> Sind überhaupt alle Pins von B Eingang?

naja...die sind dann automatisch auf null

insgesamt sind es fünf eingänge und ob die alle auf port b c oder d 
sind, ist egal...auf jeden fall alle auf einen
von Krapao (Gast)


Lesenswert?

Ups!!!
Aufpassen mit den Klammern und dem C-Operatoren Vorrang oder besser 
klammern.
http://www.tu-chemnitz.de/urz/kurse/unterlagen/C/kap2/vorrang.htm

>> (PINB & (1<<PINB2) | (1<<PINB3));
Daraus macht der Compiler intern:
Bitmanipulation

PINB einlesen
Eingelesenes mit (1<<PINB2) bitweise verUNDen
Ergebnis mit (1<<PINB3) verODERn

Bsp. #1:
PINB                    = 0b00001100
PINB & (1<<PINB2)       = 0b00000100
0b00000100 | (1<<PINB3) = 0b00001100

Bsp. #2:
PINB                    = 0b00000100
PINB & (1<<PINB2)       = 0b00000100
0b00000100 | (1<<PINB3) = 0b00001100

Bsp. #3
PINB                    = 0b00000100
PINB & 0b00001100       = 0b00000100  <= vgl. Bsp. #2:

Das im Prinzip ja in meinem Beitrag oben kannst du streichen.
von Johannes A. (kleinerkeiler96)


Lesenswert?

sehr gut. danke
mehr wollte ich gar nicht wissen.
tschausen
von Krapao (Gast)


Lesenswert?

> ich würde fast denken, wenn man diese if Anweisung mit binärcode
> schreibt, geht es schneller

Tut es nicht, weil der Compiler den Teilausdruck den du ersetzen willst 
und die Rechenregeln beim Kompilieren schon ausrechnet. Beide Varianten 
- die mit symbolischen Namen und die mit Binärzahl (bei korrekter 
Klammerung...) - haben die gleiche Ausführungszeit. Die Variante mit 
symbolischen Namen ist aber besser lesbar und besser wartbar.
von Johannes A. (kleinerkeiler96)


Lesenswert?

Krapao schrieb:
> geht es schneller

damit meinte ich, den code schneller schreiben können. nur für mich
von Karl H. (kbuchegg)


Lesenswert?

Johannes Adler schrieb:
> Krapao schrieb:
>> geht es schneller
>
> damit meinte ich, den code schneller schreiben können. nur für mich

Schneller schreiben ist nie ein Argument.

Du schreibst den Code einmal und machst vielleicht noch ein paar 
Änderungen. Aber: Du liest ihn viele male, bis das Programm fertig ist. 
Code wird so geschrieben, dass man ihn gut lesen kann und nicht dass man 
beim Schreiben ein paar Tastendrücke einspart.
von spess53 (Gast)


Lesenswert?

Hi

>damit meinte ich, den code schneller schreiben können. nur für mich

Dann solltest du das Hexadezimalsystem bevorzugen. dann wird aus
1<<PINB2) | (1<<PINB3 -> 0x0C. Kürzer und unverständlicher geht es dann 
wirklich nicht.

MfG Spess
von Michael A. (Gast)


Lesenswert?

Johannes Adler schrieb:
> if (PINB & (0b00001100);
>
> wenn pb2 und 3 auf high sind, dass ich dann ein eingang habe

Eine Grundregel ist, dass es genauso viele öffnende wie schließende 
Klammern geben muß. Aber das wird dir dein Compiler dann auch sagen.

Das PinB hat mit der Umschaltung zwischen Eingang und Ausgang überhaupt 
gar nichts zu tun. Dafür gibt's das DDRB - steht aber alles im 
Datenblatt von Atmel.
von Klaus W. (mfgkw)


Lesenswert?

spess53 schrieb:
> Kürzer und unverständlicher geht es dann
> wirklich nicht.

dezimal?
von spess53 (Gast)


Lesenswert?

Hi

>dezimal?

Da hast du recht.

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