AVR GCC C++ I/O-Zugriffe

Gast #949776
Lesenswert?

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

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
#949810
Lesenswert?

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

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