Tasterentprellung

Gast #3970196
Lesenswert?

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
#3970219
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren