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
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
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

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.