Hallo,
ich weiss, es wurde schon sehr oft diskutiert.
Ich bin haber blutiger Anfänger und verstehe nicht ganz genau was hier
passiert.
#define TASTERPORT PINC
#define TASTERBIT PINC1
if(zustand == 0 && !(TASTERPORT & (1<<TASTERBIT)))
Ist TASTERPORT der ganze Port? z.B. P0 also 8 Bit
Ist TASTERBIT ein Pin am Port? z.B P0.0 also 1 Bit
Wenn das so ist, wäre doch P0.0 immer 0.
Wie gesagt, ich verstehe es nicht. Könnte es mir vielleicht jemand
erklären?
Mir geht es nur um diesen Ausdruck: (TASTERPORT & (1<<TASTERBIT)
Den rest habe ich verstanden.
Danke
PINC und PINC1 sind Macros in der "io.h, kann man sich ansehen. PINC ist dabei eine Variable an einer festen IO-Adresse. PINC1 ist nur eine Zahl, mit der dann durch 1<<PINC1 die Bitmaske gebildet wird.
Wieso schiebe ich hier das TASTERBIT um eins nach links also an die höherwertige Stelle. Es ist doch nur ein Bit. Port P0: _ _ _ _ _ _ P0.0 _
Anfänger schrieb: > Wieso schiebe ich hier das TASTERBIT um eins nach links also an die > höherwertige Stelle. Eins wird um Tasterbit nach links geschoben > Es ist doch nur ein Bit. Nein, es ist nur eine Zahl, die sagt an welcher Stelle das bit im PINx Register ist. PINC1 ist irgendwo als 1 definiert. TASTERPORT & (1<<TASTERBIT) sieht nach dem Präprozessor so aus:
1 | PINC & (1<<1) |
(1<<1) entspricht dann 0b00000010, das wir dann bitweiße mit dem PINC Register verUNDet [1], z.B.
1 | 1) PINC = 0bxxxxxx1x |
2 | |
3 | 0bxxxxxx1x & |
4 | 0b00000010 |
5 | ---------- |
6 | =0b00000010 = True |
7 | |
8 | 2) PINC = 0bxxxxxx0x |
9 | |
10 | 0bxxxxxx0x & |
11 | 0b00000010 |
12 | ---------- |
13 | =0b00000000 = False |
14 | |
15 | x = don't care |
Der Ausdruck
1 | (TASTERPORT & (1<<TASTERBIT)) |
ist also True wenn der Eingang High ist, und False wenn er low ist. [1] UND:
1 | A B | A & B |
2 | 0 0 | 0 |
3 | 0 1 | 0 |
4 | 1 0 | 0 |
5 | 1 1 | 1 |
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.