[Xcode] Pins ganz simpel auf 0/1 setzen

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

towaibw
Posts: 198
Joined: Sat Dec 27, 2003 10:55 pm
Location: Berlin / Germany
Contact:

Post by towaibw »

So, jetzt noch ein Erkärungsversuch von mir:
Das alle Bits nur auf einmal geschrieben werden können, hast Du ja schon verstanden. Um nun bei gezielten Bitmanipulationen die anderen Bits nicht zu beeinflussen, ist es unabdingbar, sich die zuletzt ausgegeben Daten in einer Variablen zu merken. Ich benutze jetzt mal Java, um das konkret zu machen

Code: Select all

int data = 0;
und das jetzt ausgeben, bedeutet alle Bits sind 0 (Low). Das ist der Ausgangszustand.

Wenn Du jetzt Bits manipulieren möchtest, tust Du das mit der Variabel "data" und wenn Du damit fertig bist, gibts Du "data" erneut aus. Wie manipuliert man nun ein Bit? Bits setzten (auf 1 oder High) funktioniert mit "bitweisem Oder '|'" und Bits rücksetzen (auf 0 oder Low) mit "bitweisem Und '&'". Dafür benötigst du Bitmasken, die Du am besten in Konstanten definierst und Namen vergibst, unter denen Du Dir etwas vorstellen kann (bei mir steht CLR für "CLEAR" = rücksetzen).

Für die ersten 4 Bit:

Code: Select all

final int BIT_0_SET = 0x01; //binär: 0000 0001
final int BIT_1_SET = 0x02; //binär: 0000 0010
final int BIT_2_SET = 0x04; //binär: 0000 0100
final int BIT_3_SET = 0x08; //binär: 0000 1000
System: das gewünschte Bit ist 1, alle anderen sind 0.

Code: Select all

final int BIT_0_CLR = 0xFE; //binär: 1111 1110
final int BIT_1_CLR = 0xFD; //binär  1111 1101
final int BIT_2_CLR = 0xFB; //binär: 1111 1011
final int BIT_3_CLR = 0xF7; //binär: 1111 0111
System: das gewünschte Bit ist 0, alle anderen sind 1.

Ein Bit setzen geht jetzt so (Beispiel Bit1):

Code: Select all

data = data | BIT_1_SET;
Das selbe Bit wieder zurücksetzen:

Code: Select all

data = data & BIT_1_CLR;
Alles klar? Hier muß man eigentlich nur verstehen, wie "Und" und "Oder" funktionieren ;-)
Mike D
Posts: 91
Joined: Wed Jun 02, 2004 4:07 pm
Location: Elbe- Weser-Dreieck
Contact:

Post by Mike D »

towaibw wrote:

Code: Select all

int data = 0;
da der IOW aber beim Einschalten alle Pins auf 1 setzt, und um Eingänge nicht zu blockieren würde ich zu Anfang alles auf 1 setzen.
also int data = 0xFFFFFFFF;
mz
Posts: 9
Joined: Tue May 10, 2005 5:53 pm

Post by mz »

Perfekt, danke! Klappt nun alles wunderbar! Ist ja ganz einfach!
Post Reply