- Data Direction Register x (DDRx)
Die einzelnen Bits geben an, ob der jeweilige Pin als Ein- oder Ausgang benutzt wird.
DDxn = 0 -> Eingang
DDxn = 1 -> Ausgang - Port x Data Register (PORTx)
Wenn ein Pin im Data Direction Register x (DDRx) als Ausgang definiert ist:
PORTxn = 0 -> Ausgabe von logisch „0“
PORTxn = 1 -> Ausgabe von logisch „1“
Wenn ein Pin im Data Direction Register X (DDRX) als Eingang definiert ist:
PORTxn = 0 -> Interner Pullup-Widerstand deaktiviert
PORTxn = 1 -> Interner Pullup-Widerstand aktiviert - Port x Input Pins Register (PINxn)
Wenn ein Pin im Data Direction Register X (DDRX) als Eingang definiert ist, stellt PINXn des jeweiligen Zustand des Pins dar.
Tabelle 1:
Bit (n) | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
DDRx | DDxn | DDxn | DDxn | DDxn | DDxn | DDxn | DDxn | DDxn |
PORTBn | D13 | D12 | D11 | D10 | D9 | D8 | ||
PORTCn | A5 | A4 | A3 | A2 | A1 | A0 | ||
PORTDn | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
PINx | PINx7 | PINx6 | PINx5 | PINx4 | PINx3 | PINx2 | PINx1 | PINx0 |
Ein- / Ausgangsports |
x = Portnummer, n = Bitnummer
Beispiel:
Setzen der Binär-Pins D2 und D7 als Ausgang:
(D2 und D7 sind die Bits 2 und 7 am Port D)
DDRD |= B10000100; // Nur Bit 2 und 7 werden verändert // oder DDRD |= (1 << DDD2); //D2 ist Ausgang DDRD |= (1 << DDD7); //D7 ist Ausgang // oder DDRD |= (1 << DDD2) | (1 << DDD7); //D2 und D7 sind Ausgaenge
Ausgabe von logisch „1“ und logisch „0“ am Beispiel Binär-Pin D10:
(D10 ist das Bit 2 am Port B)
//D10 als Ausgang setzen DDRB |= (1 << DDB2); //D10 auf "1" setzen PORTB |= (1 << PORTB2); //D10 auf "0" setzen PORTB &= ~(1 << PORTB2);
Einlesen des Binär-Pins D5 mit internem Pullup-Widerstand:
(D5 ist das Bit 5 am Port D)
//D5 als Eingang setzen DDRD &= ~(1 << DDD5); //Pullup-Widerstand aktivieren PORTD |= (1 << PORTD5); //Abfrage des Eingangs-Pin D5 byte bitStatus = (PIND & (1 << PIND5)) >> PIND5;