Forum: Mikrocontroller und Digitale Elektronik Eingang einer Variablen zuweisen


von P. S. (fetter_homer)


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

von Karl H. (kbuchegg)


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 )

     ...

von asdf (Gast)


Lesenswert?

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.

von P. S. (fetter_homer)


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

von Karl H. (kbuchegg)


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.

von P. S. (fetter_homer)


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!

von Stefan E. (sternst)


Lesenswert?

P. S. schrieb:
> Würde ich das
> dann folgendermaßen machen oder gibt es auch einen einfacheren Weg?

Speziell das kannst du natürlich auch ersetzen durch
1
Variable = PORTA.F6;

Nur bei der Definition von Variable kannst du das nicht machen (quasi 
als dauerhafte Verknüpfung).

von P. S. (fetter_homer)


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?

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.