AVR GCC C++ I/O-Zugriffe

Gast #949776
Hallo,

Um ein I/0 auf HI oder LO zu setzen schreibt man z.B.:

// Port D, Pin 3 auf HI setzen.
PORTD |= (1<<3);

// Port D, Pin 3 auf LO setzen.
PORTD &= ~(1<<3);

Das funktioniert so auch ganz gut.
Ich würde jetzt gern folgendes machen:
Gehen wir davon aus an Port D, Pin 3 ist eine LED.

define LEDan PORTD |= (1<<3);
define LEDaus PORTD &= ~(1<<3);

und dann möchte ich in meinem Programm anstatt:
PORTD |= (1<<3); und PORTD &= ~(1<<3);
einfach die befehle
"LEDan" und "LEDaus"
verwenden können.

Also dass der Compiller einfach die Befehle
"LEDan" und "LEDaus"
durch
PORTD |= (1<<3); und PORTD &= ~(1<<3);
ersetzt.


Geht so was? Wie muss da der Syntax aussehen...
So wie ich es soben gemacht hab funktioniert es bestimmt nicht.

Danke für eure Hilfe!

Gruß Johannes!
Gast #949791
So in etwa geht es.

#define LEDan PORTD |= (1<<3)
#define LEDaus PORTD &= ~(1<<3)

Das wäre die richtige Syntax. Also der Lattenzaun davor und das 
Semikolon weg. Vorausgesetzt der Pin ist als Ausgang geschaltet und das 
LED geht nach Masse.

MW
Gast #949801
Danke für deine Antwort!

Oh cool, fast so wie ich es mir gedacht habe.

Was muss ich dann schrieben um die LED an oder aus zu machen?
LEDan
oder
LEDan;
oder
doch was anderes?

Gruß Johannes!
#949810
Hallo

Ganz einfach:

Anstatt PORTD &= ~(1<<3); schreibst du von #define LEDan PORTD |= (1<<3)
nur noch LEDan. Beim Header ja so heisst das glaub, wird defniert das 
die Variable LEDan = PORTD |= (1<<3) heisst.

Schreibst du im Code nun LEDan; , wird das durch den Compiler 
automatisch mit PORTD |= (1<<3) ersetzt :-)


PS einfach testen, du hast sicher ein ISP-Kabel. Ich mache das auch so, 
einfach tüfteln überlegen und halt auch viel probieren. Dann klappt es. 
Mit der Zeit kommt auch die Erfahrung.

Gruss Alain

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.