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
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.
...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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.