www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega2560 if(PINE7==1)


Autor: Greenhorn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine Frage zu nachfolgenden Source Code.

Ich versuche den PINE7 abzufragen , mit einer IF Schleife..

if(PINE7==1)
{
senden();
}
else
{
}


Doch leider klappte es nur wenn ich als Argument für if schreibe..

if(PINE & (1<<PINE7)
{
senden();
}
else
{
}


Kann mir jemand erklären warum? Danke

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1.: Es gibt keine if-Schleife! if ist eine Abfrage und keine Schleife.
2.: Wenn Du mit WINAVR programmierst, dann ist PINE7 in der Headerdatei 
als Zahl 7 definiert. Und 7 ist nunmal nicht 1, weshalb die Bedingung 
nie wahr sein kann.
3.: Schau Dir im AVR-GCC-Tutorial mal das entsprechende Kapitel an. Da 
steht alles drin.

Autor: fieser, klugscheissender Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>IF Schleife..

Schleifen haben etwas wiederholendes... Es ist eine ABFRAGE!

>if(PINE7==1)
Das würde bei Codevision auch nicht unbdeingt gehe: Da wird die falsche 
Bezeichnung benutzt.

>Kann mir jemand erklären warum? Danke
Weil das beim AVR-GCC nun mal so ist?!

Der Compiler unterstützt keine Einzelbitbehandlung.

>if(PINE7==1)

Dürfte immer falsch sein. PINE7 ist eine Konstante (7), die von 1 
verschieden ist.

Autor: fieser, klugscheissender Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal wieder das Johnny.m-Voodoo-Püppchen rauskramt...

Autor: Philipp Sªsse (philipp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PINE7 ist eine Konstante (nämlich 7).
PINE ist dagegen das Leseregister des Ports E.

Ob das siebente Bit dieses Ports gesetzt ist, erfährt man durch ein 
logisches ODER von PINE und dem auszulesenden Bit (binär 1000000). Eine 
andere Schreibweise dafür ist (1<<PINE7), also 00000001 sieben mal nach 
links verschoben. Achtung: das Ergebnis ist dann auch nicht 1, sondern 
128!

Auf den ersten Blick umständlich, aber man gewöhnt sich dran. Für viele 
Fälle ist es übersichtlicher, sich anwendungsbezogene Defines zu machen:

// Bit 7 an Port E ist die Taste 1
#define TASTE_1   (PINE & (1<<PORTE7))
...
if (TASTE_1)
...


Dann weiß man auch nächstes Jahr beim Lesen gleich, was los ist, ohne 
erst nachschlagen zu müssen.

Und man kann nach einem Redesign einfach das define anpassen, wenn Taste 
1 dann woanders hängt.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Mal wieder das Johnny.m-Voodoo-Püppchen rauskramt...
...sich mal wieder vor Schmerzen windet... Aaaauuuu...

Autor: fieser, klugscheissender Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>#define TASTE_1   (PINE & (1<<PORTE7))
>if (TASTE_1)...

Gilt ja eigentlich nur für +-schaltende Tasten. Die meisten werden aber 
gegen Masse geschaltet. Dann sollte man eher

#define TASTE_1   (!(PINE & (1<<PORTE7)))

schreiben...(Nur so als Ergänzung...na, Johnny, tut's schon weh?!-)

Autor: Greenhorn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, vielen dank für die schnelle Antwort

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.