Direkter Portzugriff beim Arduino

Gast #5642462
Lesenswert?

Wie ich statt serialRead/serialWrite direkt auf die Ports zugreifen 
kann, weiß ich. Nur mit einem weiß ich nicht weiter. Die Portnummern für 
den Zugriff via serialRead/serialWrite hatte ich in Variablen 
gespeichert. Das geht beim Direktzugriff wohl nicht, weil *Portname und 
Bit* gespeichert werden muss. Oder hat jemand eine Idee, auf welche 
Weise die Info kompakt gespeichert werden kann?
Gast #5642491
Lesenswert?

Warum sollte man etwas speichern?

Ich lege per Define einen Name für das Pin eines Ports fest und greife 
dann darauf zu!

Quelle: Peter Dannegger
1
struct bits {
2
  u8 b0:1;
3
  u8 b1:1;
4
  u8 b2:1;
5
  u8 b3:1;
6
  u8 b4:1;
7
  u8 b5:1;
8
  u8 b6:1;
9
  u8 b7:1;
10
} __attribute__((__packed__));
11

12
#define SBIT(port,pin) ((*(volatile struct bits*)&port).b##pin)
1
#define LED_PIN SBIT(portb,0)
2
#define LED_DDR SBIT(ddrb,0)
3

4
LED_DDR = 1; // output
5
LED_PIN = 1; // on
6
LED_PIN = 0; // off
Gast #5642548
Lesenswert?

Danke aber das hilft mir nicht weiter. Vielleicht habe ich das Problem 
nicht gut beschrieben. Ist es möglich, einen Port dynamisch zu 
adressieren? Also wenn der Pin (Port und Bit) erst zur Laufzeit 
feststehen?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren