Forum: Mikrocontroller und Digitale Elektronik Hilfe bei Port-Abfrage


von Patrick (Gast)


Lesenswert?

Hallo zusammen.

Ich hab folgenden Code:
1
stat = PINA & ((1 << PA5) | (1 << PA6));
2
 if (stat == ((1 << PA5) | (1 << PA6))) return LAMP_ERROR;
3
 else if (stat == 0) return LAMP_NONE;
4
 else if (stat == (1 << PA5)) return LAMP_MAIN;

Ich bin leider noch nicht ganz fit mit Bitmanipulation. Kann mir 
vielleicht jemand sagen, wie die Zustände der Ports sein müsssen, damit 
ich LAMP_MAIN zurück bekomme?

Danke und Gruss
Patrick

von Johannes M. (johnny-m)


Lesenswert?

Patrick wrote:
> Kann mir
> vielleicht jemand sagen, wie die Zustände der Ports sein müsssen, damit
> ich LAMP_MAIN zurück bekomme?
PA6 low und PA5 high...

Step by step:
1
 stat = PINA & ((1 << PA5) | (1 << PA6));
In stat wird der ausmaskierte Zustand von PA6 und PA5 abgelegt, die 
Bits 7 und 4...0 sind 0.
1
 if (stat == ((1 << PA5) | (1 << PA6))) return LAMP_ERROR;
Wenn stat (also der Zustand von PA6 und PA5) gleich der Maske aus PA6 
und PA5 ist (also wenn beide Pins High-Pegel haben), dann wird 
LAMP_ERROR zurückgegeben.
1
 else if (stat == 0) return LAMP_NONE;
Wenn beide Pins Low-Pegel haben, dann ist stat 0 und es wird LAMP_NONE 
zurückgegeben.
1
 else if (stat == (1 << PA5)) return LAMP_MAIN;
Wenn die beiden vorherige Bedingungen nicht erfüllt waren (also wenn 
weder beide ausgewerteten Pins High-Pegel noch beide Low-Pegel haben) 
und nur PA5 High-Pegel hat, dann LAMP_MAIN zurückgeben.

von Patrick (Gast)


Lesenswert?

Danke

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.