Portmanipulation

Lesezeit: 3 Minuten

Die dig­i­tal­en und die analo­gen Pins des Arduinos sind in drei Grup­pen aufgeteilt:

Funk­tio­nen wie dig­i­tal­Write() und dig­i­tal­Read() sind rel­a­tiv langsam in der Aus­führung und manch­mal wer­den Pro­gramme mit vie­len Ein- oder Aus­gän­gen kom­plex und schw­er überschaubar.Deshalb ist es oft über­sichtlich­er die Pins mith­il­fe der Ports zu definieren und zu schal­ten.

Es existieren drei soge­nan­nte Reg­is­ter:

Reg­is­terFunk­tion
DDR(D,B,C)Pins als INPUT = 0 oder als OUTPUT = 1 definieren
PORT(D,B,C) Pins als HIGH = 1 oder als LOW = 0 fes­tle­gen
PIN(D,B,C)gibt den Zus­tand der Pins an, die im DDR-Reg­is­ter auf Input geset­zt wur­den

Das Reg­is­ter wird jew­eils mit dem Namen des Ports (D, B oder C) ergänzt.
Beim Zugriff auf die Ports wird jew­eils ein Bit geset­zt. Sein Wert ist entwed­er 1 = an, oder 0 = aus

Beispiele:

Dig­i­tale Pins 7, 6, 5, 4 und 3 als OUTPUT set­zen

DDRD = B11111000;

Dig­i­tale Pins 7, 6, 5, 4 und 3 auf HIGH set­zen:

PORTD = B11111000;

Taster an Pin 13 als INPUT set­zen

DDRB = B00100000;

PUL­L_UP-Wider­stand an Pin 13 ein­schal­ten

PORTB = B00100000;

Beispiel: Wech­sel­blink­er mit Ports

Beispiel: Ampel

Einzelne Bits wer­den mit den Oper­a­toren « eine Posi­tion nach links und » eine Posi­tion nach rechts ver­schoben.

Nach rechts schieben:

PORTD = PORTD » 1;

PORTD = PORTD » 1;

PORTD = PORTD » 1;

PORTD = PORTD » 1;

PORTD = PORTD » 1;

Nach links schieben:

PORTD = PORTD « 1;

PORTD = PORTD « 1;

PORTD = PORTD « 1;

PORTD = PORTD « 1;

PORTD = PORTD « 1;

Bit­ma­nip­u­la­tion

Der Para­me­ter ~ kehrt den Wert eines Bits um: