www.mikrocontroller.net

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


Autor: Jo Mc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jo Mc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LEDan;
Defines sind Textersatz.

MW

Autor: Alain F. (fox82)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.