Eingang einer Variablen zuweisen

OP #2737642
Lesenswert?

Hallo zusammen,
ich wollte mal fragen, ob es möglich (und sinnvoll) ist, ein Eingang auf 
eine Variable zu legen? Ich programmiere in C und habe dabei folgendes 
versucht:
1
char Empfaenger = PORTB.F6;
Jetzt bekomme ich natürlich "Const expression expected" als 
Fehlermeldung gesagt.

Danke und Gruß
Peter
#2737648
Lesenswert?

P. S. schrieb:
> Hallo zusammen,
> ich wollte mal fragen, ob es möglich (und sinnvoll) ist, ein Eingang auf
> eine Variable zu legen?

Wenn du das so meinst, dass die Variable damit mit dem Eingang verknüpft 
ist, dann nein.
Du kannst natürlich jederzeit den Eingangspin abfragen und den 
erhaltenen Wert einer Variablen zuweisen. Aber das ist dann der Wert zum 
Zeitpunkt des Abfragens.

Wenn es dir nur darum geht, dass du quer durchs Programm einen 
vernünftigen 'Namen' für den Pin hast, dann kannst du natürlich per 
#define dafür einen vereinbaren


#define  EMPFAENGER  PORTB.F6


...

   if( EMPFÄNGER )

     ...
OP #2737658
Lesenswert?

Danke für die schnelle Antwort!
Das mit dem #define gefällt mir :-)
Die andere Variante interessiert mich jedoch auch noch. Würde ich das 
dann folgendermaßen machen oder gibt es auch einen einfacheren Weg?
1
if(PORTA.F6 == 1){
2
   Variable = 1;
3
}
4
if(PORTA.F6 == 0){
5
   Variable = 0;
6
}

Danke und Gruß
Peter
#2737663
Lesenswert?

Welcher COmpiler ist das? Bzw. welcher µC?


> oder gibt es auch einen einfacheren Weg?
Was daran ist denn kompliziert?

Wenn dein Compiler dir PORTA.F6 zulässt und daraus Code generiert, der 
diesen Pin abfragt, dann ist das wohl so ziemlich das einfachst 
mögliche.

Im übrigen brauchst du nicht explizit auf 1 bzw. 0 zu vergleichen.
In C gilt die Regel: jeder Ausdruck, der 0 ergibt ist automatisch ein 
logisches FALSE und alles ungleich 0 ist automatisch ein logisches TRUE

d.h.

  if( irgendwas == 1 )
und
  if( irgendwas )

sind bedeutungsmässig gleich.

Genauso wie

  if( irgendwas == 0 )
und
  if( !irgendwas )


Je nach Zusammenhang können aber die beiden Formen OHNE expliziten 
Vergleich klarer sein bzw. weniger fehleranfällig.
OP #2737669
Lesenswert?

Karl Heinz Buchegger schrieb:
> Welcher COmpiler ist das? Bzw. welcher µC?

mikroC PRO for PIC / PIC18F1320

>> oder gibt es auch einen einfacheren Weg?
> Was daran ist denn kompliziert?

Aja "Empfaenger = PORTB.F6;" wäre NOCH einfacher gewesen ;-)

> Je nach Zusammenhang können aber die beiden Formen OHNE expliziten
> Vergleich klarer sein bzw. weniger fehleranfällig.

Alles klar, Danke!
OP #2737680
Lesenswert?

asdf schrieb:
> Das Gleichheitszeichen = ist ein Zuweisungsoperator. Was der tut steht
> im C-Buch deines Vertrauens. Und: ja, der Zuweisungsoperator wird oft
> verwendet um Eingangswerte einer Variablen zuzuweisen.

Dass das nicht funktioniert, war mir ja schon klar (hatte ich ja auch im 
ersten Beitrag geschrieben). Ich dachte nur, dass mir das hilft, mein 
Problem zu beschreiben...

Stefan Ernst schrieb:
>Speziell das kannst du natürlich auch ersetzen durch

>Variable = PORTA.F6;

Habe das, nachdem ich im Glauben war, das gehe nicht, gerade nochmal 
ausprobiert. Dazu muss die Zeile allerdings in der main-Funktion stehen, 
dass hatte ich anfangs übersehen -.-
"define" ist da aber immernoch die beste Lösung, oder ist das 
geschmacksache?

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