Portpins geschickt einlesen

Gast #2844240
Lesenswert?
• ▲
▼
Prozessor: AVR Atmega8

Hallo,

ich möchte eine Kombination aus 3 Portpins geschickt einlesen und je 
nachdem, welche Kombination ausgewählt ist, etwas Bestimmtes tun.

Und zwar so wollte ich beispielsweise Port C verwenden und dort PC0, 
PC1, PC2 am einfachsten die internen Pullups aktivieren.
Nun sollen an die Ports Masse einzeln Masse angelegt werden, sodass je 
nachdem wo die Masse anliegt, 2^3 = 8 verschiedene 
Zuständs-Kombinationen entstehen, z.B.
Zustand 1: PC0 low, PC1 high, PC2 high
Zustand 2: PC0 high, PC1 low, PC2 low
usw.

Nun ist meine Frage, wie man das am besten im Programm einliest, um 
etwas zu machen.

Angenommen man würde nur Port C verwenden und sonst dort nichts 
anschließen, so könnte man ja den ganzen Port in eine Variable einlesen 
und bekommt eine Zahl als Ergebnis. Diese könnte man dann auswerten.
Am einfachsten wäre es, wenn man eine Zahl in diesem Falle von 0 bis 7 
bekommen würde, doch wie setzt man das am besten um?
Schließlich sind bei internen Pullups der "Standard-Zustand" high und 
damit das Bit gesetzt.

Gruß
Manuel
Gast #2844256
Lesenswert?
• ▲
▼
Such mal nach "Bitmanipulation".

Das Ausmaskieren der fünf nicht benötigten Bits  geht über eine 
UND-Verknüpfung mit binär 00000111.

Das "Umdrehen" der Bits über eine "Exklusive Oder"-Verknüpfung mit 
00000111.
Gast #2844267
Lesenswert?
• ▲
▼
...war vielleicht ein wenig kurz beantwortet. Ich lege nochmal nach:
Als erstes liest Du einfach den "kompletten" Port, also 8 Bit in ein 
Register ein. Das geht unabhängig davon, ob an den anderen Ports 
irgendetwas angeschlossen ist. Der Zustand dieser übrigen Bits 
interessiert Dich aber nicht.

Du musst jetzt zwei Dinge tun.
1. Die nicht benötigten Bits "ausmaskieren", sozusagen "auf null" 
setzen. Das kannst Du über eine UND-Verknüpfung machen.
2. Du drehst Deine Bits um, damit Du deine 3-Bit-Zahl bekommst.

Ob Du erst ausmaskierst und dann umdrehst oder umgekehrt ist egal. Beim 
"Umdrehen" musst aber je nach Reihenfolge darauf achten mit welcher Zahl 
du die Exklusiv-Oder-Verknüpfung durchführst. (00000111 oder 11111111)

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.