Wenn ich einen Port so programmiere, dass ich die untersten 4 Bits als Eingang und die obersten 4 Bit als Ausgang benutze, wie frage ich in dem Falle den Zustand der Eingänge ab. Die Ausgänge ändern sich stetig im Programmablauf. Gruß aus Berlin
Nimm an, Du würdest einen Port mit 8 Eingängen abfragen und ignoriere die Bits die auf Ausgang geschaltet sind.
im Prinzip wie Guru schon schrieb, benutze Bit-Masken für jeden einzelnen Eingang
"Ignorieren" heisst hier soviel wie, die Ausgangsbits nach dem Einlesen des Ports auf einen konstanten Wert zu setzen, so das Du bei dem Vergleich der eigentlichen Eingangsbits von festen Werten der Ausgangsbits ausgehen kannst. Wie sieht es mit Deinen Kenntnissen bezüglich den Bitweisen boolschen Operatoren bzw. Operationen aus? Weisst Du wie man Bits maskiert? Welche Sprache willst Du benutzen?
bin in C++ sieht hier so aus : while(1) { taste = PINA; _delay_ms(200); if (taste == 0b11110111) { PORTC = 128; // LED ON _delay_ms(200); PORTC = 0; // LED OFF } } d.h ich mache eine oder Verknüfung mir dem Wert 0b11111111 mit taste und habe damit die oberen für die Abfrage ignoriert.
Ingo Laabs schrieb: > if (taste == 0b11110111) und was ist, wenn sich die Ausgänge ändern?! Guru schrieb: > Wie sieht es mit Deinen Kenntnissen bezüglich den Bitweisen boolschen > Operatoren bzw. Operationen aus? Weisst Du wie man Bits maskiert?
>ich mache eine oder Verknüfung mir...
Wozu soll das gut sein? Wer hat was von einer Oder-Verknüpfung
geschrieben?
>genau dahin zielte meine Frage ! Liest Du eigentlich was hier geantwortet wird? >"Ignorieren" heisst hier soviel wie, die Ausgangsbits nach dem Einlesen >des Ports auf einen konstanten Wert zu setzen, so das Du bei dem >Vergleich der eigentlichen Eingangsbits von festen Werten der >Ausgangsbits ausgehen kannst. >Wie sieht es mit Deinen Kenntnissen bezüglich den Bitweisen boolschen >Operatoren bzw. Operationen aus? Weisst Du wie man Bits maskiert? Welche >Sprache willst Du benutzen?
Schreib Dir mal die Wahrheitstabellen für die logischen Verknüpfungen "Oder" und "Und" auf. Dann fällt es Dir wie Schuppen von den Augen. Ansonsten ist das wohl wieder mal ein Fall für Karl Heinz Buchegger.
Guru schrieb: > Schreib Dir mal die Wahrheitstabellen für die logischen Verknüpfungen > "Oder" und "Und" auf. Dann fällt es Dir wie Schuppen von den Augen. > Ansonsten ist das wohl wieder mal ein Fall für Karl Heinz Buchegger. Bin gerade dabei :-)... soviele Schuppen auf einmal ohje
Hm. Ich muss mich wohl entschuldigen bei Dir Ingo. Schlechte Laune heute. Obwohl es unüblich ist, ist es auch möglich, das mit einer Oder-Verknüpfung zu tun. Wie Du wahrscheinlich schon festgestellt hast, wird mit einer Und-Verknüpfung mit 0 ein Bit immer auf 0 gesetzt. Bei einer Und-Verknüpfung mit 1 aber kommt immer wieder das variable Eingangsbit hervor. Bei einer Oder-Verknüpfung mit 1 wird ein Bit immer auf 1 gesetzt, bei einer Verknüpfung mit 0 kommt auch wieder das variable Eingangsbit hervor. Insofern war Deine Antwort mit dem Oder in Ordnung. Was Du noch wissen musst, ist, wo Du bei einer Oder-Verknüpfung die 1 Bits und die 0 Bits verteilst. Die analoge Überlegung solltest Du auch für die Und-Verknüpfung machen, weil die üblicher ist.
Nimm mal an, Du hättest das Eingangsbit (ob es eines oder mehrere sind spielt erstmal keine Rolle) bei Bit Nr. 0. Dann würdest Du den gesamten Port-Wert mit 0xFE ver-odern bzw. mit 0x01 Und-verknüpfen. Bei dem Oder erhälst Du dann entweder 0xFF oder 0xFE, je nachdem ob der Eingangspin auf 0 oder 1 steht. Beim Oder erhälst Du entweder 0x00 oder 0x01. Klar? Man nimmt eigentlich lieber das Und, weil der Vergleichswert für einen Menschen, inbesondere bei mehreren Eingangspin einen Tick leichter zu lesen und zu schreiben ist.
Es muss heissen: Dann würdest Du den gesamten Port-Wert mit 0xFE ver-odern bzw. mit 0x01 Und-verknüpfen. Bei dem Oder erhälst Du dann entweder 0xFF oder 0xFE, je nachdem ob der Eingangspin auf 0 oder 1 steht. Beim Und erhälst Du entweder 0x00 oder 0x01. Klar? Wär ich bloss heute im Bett geblieben.
Guru schrieb: > Man nimmt eigentlich lieber das Und, weil der Vergleichswert für einen > Menschen, inbesondere bei mehreren Eingangspin einen Tick leichter zu > lesen und zu schreiben ist. Auf jeden Fall! Dann hat man gleich das richtige Ergebnis. Solche Maskierungen macht man ja überall mal.
Guru schrieb: > Es muss heissen: > > Dann würdest Du den gesamten Port-Wert mit 0xFE ver-odern bzw. mit 0x01 > Und-verknüpfen. Bei dem Oder erhälst Du dann entweder 0xFF oder 0xFE, je > nachdem ob der Eingangspin auf 0 oder 1 steht. Beim Und erhälst Du > entweder 0x00 oder 0x01. Klar? > > Wär ich bloss heute im Bett geblieben. Frage ist ja erledigt..kannst dich wieder hinlegen. Ich stell dir nach dem aufstehen ein bissel Gebäck mit Kaffee hin..ok ..Gutes Nächtle :-)
>Auf jeden Fall!
Na sicher nimmt man das "Und". Ich nehm's seit 30 Jahren.
Aber es ist jedenfalls für einen Anfänger gut, wenn man ihm bestätigt
das sein Grundgedanke richtig war, auch wenn er auf eine unübliche
Lösung gekommen ist, die deswegen unüblich ist weil sie auch Nachteile
hat.
>..Gutes Nächtle :-)
Hach. Noch so ein Zwerg aus dem Schwarzwald! Grüsse aus dem Landkreis
Rottweil.
Guru schrieb: >>..Gutes Nächtle :-) > > Hach. Noch so ein Zwerg aus dem Schwarzwald! Grüsse aus dem Landkreis > Rottweil. nein Berlin..geboren in Niedersachsen..
Würde mich aber trotzdem noch über Karl-Heinz seine Auslegungen freuen. Das hat immer sowas verständliches ansich...
citb schrieb: > C++ fuer uCs? Gibt es nicht und wird es auch nicht geben. citb schrieb: >>bin in C++ Also wer C++ kann, der kann auch C. Baut ja schließlich aufeinander auf. Thema Bitmanipulation http://www.mikrocontroller.net/articles/Bitmanipulation.
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.