Forum: Mikrocontroller und Digitale Elektronik Pin setzen und löschen über Funktionsaufruf in C


von Rüdiger B. (fenris)


Lesenswert?

Hallo,

ich hab mal wieder ein Brett vorm Kopf und bitte um Abhilfe.
Folgendes, ich möchte gezielt einen einzelnen Portpin setzen. 
Vorzugsweise mit einem Befehl wie z.B.

i = 0; //oder eben i = 1;
PA7 = i;

(geht so in der Form natürlich nicht, ist mir schon klar).
Ich könnte natuerlich einfach eine if-Anweisung schreiben die den 
Variablenwert abfragt.

  if(i == 1)
   PORTA |= (1<<PA7);
  else
   PORTA &= ~(1<<PA7);
Aber genau diese Anweisung möchte ich eigentlich vermeiden. Geht sowas 
überhaupt?

Derzeit ratlose Grüsse,
Rüdiger

von Klaus F. (kfalser)


Lesenswert?

Ich nehme an Du beziehst Dich auf den AVR Prozessor.
Das es meines Wissens auch keinen Assembler Befehl zum Setzen eines Bits 
nach Deinem Wunsch gibt, müßte auch der Compiler dies wieder in einen 
Sprungbefehl und einen sbi oder cbi Befehl umsetzen.
Es wird also (außer Buchstaben beim Schreiben) nichts gewonnen.
Wenn Du unbedingt weniger schreiben willst könntest Du ein Makro 
verwenden.

von Severino R. (severino)


Lesenswert?

Etwa so?

PORTA = i?PORTA|(1<<PA7):PORTA &~(1<<PA7);

Ev. müssen da noch Klammern rein.
()(())((()))(())()

von Rüdiger B. (fenris)


Lesenswert?

Ohja, entschuldigung, um einen ATMega128 gehts. Ich hatte glaub ich 
irgendwie noch die alten Assemblerbefehle, die  von damals im 
Hinterkopf. Ich hab nun auch nochmal etwas rumexperimentiert und bin 
auch zu keinen schlauen Lösung mehr gekommen. Nunja, dann kommmt an der 
stelle eben eine Abfrage rein, ist ja auch kein beinbruch. ;)

Vielen Dank für  die Antworten.

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.