Forum: Mikrocontroller und Digitale Elektronik AVR GCC C++ I/O-Zugriffe


von Jo Mc (Gast)


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!

von Michael Wilhelm (Gast)


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

von Jo Mc (Gast)


Lesenswert?

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!

von Michael Wilhelm (Gast)


Lesenswert?

LEDan;
Defines sind Textersatz.

MW

von Alain F. (fox82)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.