www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Einzelnen Port abfragen


Autor: Studiologe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich würde gerne wissen, wie ich einen einzelnen Port abfrage...
und zwar geht es leider nicht wie schon oft gehört mit
if(PIND.0 == 1)
tut leider nicht,
das brauche ich nähmlich, weil an PORTD0 und PORTD1 je ein taster sitzt
und ich abfragen will, ob beide gedrückt sind, daher kann ich folgendes
nicht machen, damit schliesst sich ja der andere port immer aus....
if((PORTD == 0b11111110) && (PORTD == 0b11111101))
damit geht es ja logischerweise nicht ...sieht man ja direkt !!!!
mhh also wie kann man nen einzelnen Port abfragen ?? :]
wär schön wenns mit
if((PORTD.0 == 0) && (PORTD.1 == 0))

Danke für eure Hilfe,
Stud

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if (!(PIND & ~0xFC)) ...

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder binär:
if (!(PIND & ~0b11111100))...
oder auch if (!(PIND & 0b00000011))
Sollte also einer der beiden Pins nicht betätigt sein (also log. 1),
ist PIND & 0x03 != 0, was dafür sorgt, dass !(PIND & 0x03) == 0 ist,
womit im else zwei ein nicht betätigter Taster bearbeitet werden kann-.

Autor: Studiologe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
danke für die schnelle Antwort,
aber was passiert, wenn noch ein schalter an PORTD4 sitz,
dann tritt folgender Fall ja auf oder auch if (!(PIND & 0b00001011))
aber ich kann ja nicht immer alle schaltstellungen berücksichtigen,
oder stört dieser port dann nicht ??

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
falls du alle Varianten brauchst:
temp=PIND & 0x03;
switch (temp){
case 0: ....;break;   //beide Eingänge 0
.
.
case 3: ....;break;   //beide Eingänge 1
}

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann nimmt man die Entprellung nach Peter Dannegger...
(siehe Codesammlung Suchbegriff im Betreff: "bulletproof")

...

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spiel die Sache doch mal mit ner Logik-Tabelle durch...
Crazy Horse hat doch schon ne wunderschöne Lösung geliefert...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.