Forum: Mikrocontroller und Digitale Elektronik Tasterentprellung


von Anfänger (Gast)


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

von Peter D. (peda)


Lesenswert?

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.

von Anfänger (Gast)


Lesenswert?

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 _

von Anfänger (Gast)


Lesenswert?

Okay. Ich versuche mir das mal aufzuzeichen. Danke für die Antwort.

von Max H. (hartl192)


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

von Anfänger (Gast)


Lesenswert?

Vielen Dank für die super Erklärung.

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.