Forum: Mikrocontroller und Digitale Elektronik AVR C Syntax


von Markus (Gast)


Lesenswert?

Ich hätte mal eine sicher sehr schnell beantwortete Frage (oder auch 2):

Es geht um die Syntax eines AVR C Codes, genauer gesagt um eine if 
Anweisung.

1. Wieso werden diese Schreibweisen nicht richtig umgesetzt?
                    if(PINA0==1);
                    if(PIN & (0<<PINA0));

Es geht hier nur um darum, ein besseres Verständnis für die 
Programmierung zu erhalten.

Mfg Markus Eder

von Uwe (Gast)


Lesenswert?

Weil PINA0 nur als wert 0 definiert ist also steht dort
if(0==1);

PIN ist gar nicht definiert höchstens PINA.

PINA ist nur als Konstante Adresse definiert je nach typ des µCs z.B. 
0x31
Also steht da z.B.
if(0x31 & ( 0<<0));

von Uwe (Gast)


Lesenswert?

> PINA ist nur als Konstante Adresse definiert

stimmt natürlich nicht da wird noch ne input oder output Operation 
gemacht.

if(inp(0x31) & ( 0<<0));

von Markus (Gast)


Lesenswert?

Uwe schrieb:
> Weil PINA0 nur als wert 0 definiert ist also steht dort
> if(0==1);

Aber wenn ich jetzt beim durchstepen durch den Programmverlauf PINA0 auf 
High setze würde ja if(1==1) dastehen und trotzdem wird nicht in die if 
Anweisung gesprungen

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Markus schrieb:
> Aber wenn ich jetzt beim durchstepen durch den Programmverlauf PINA0 auf
> High setze würde ja if(1==1) dastehen und trotzdem wird nicht in die if
> Anweisung gesprungen

Nein. PINA0 ist eine Konstante(!) und nicht der Wert des Bits im 
Portregister. PINA0 ist konstant und bleibt konstant 0, denn es 
beschreibt nur die Position des Bits im Register PINA.

Also:

   PINA0  ist immer 0
   PINA1  ist immer 1
   PINA2  ist immer 2
   PINA3  ist immer 3
   ...
   PINA7  ist immer 7

Es ist übrigens ziemlich sinnfrei, die if-Zeile mit einem Semikolon 
abzuschließen. Damit wird im Fall "Bedingung ist wahr" ein leeres 
Statement ausgeführt - also nichts. ;-)

Gruß,

Frank

von Markus (Gast)


Lesenswert?

Frank M. schrieb:
> Es ist übrigens ziemlich sinnfrei, die if-Zeile mit einem Semikolon
> abzuschließen. Damit wird im Fall "Bedingung ist wahr" ein leeres
> Statement ausgeführt - also nichts. ;-)

sollte ja nur eine Veranschaulichung sein... aber ich wollte für die 
simple Frage jetzt nicht viel Code reinschreiben.
Aber danke für die Hilfe die Erklärung erinnert mich jetzt wieder an 
paar so Dinge die ich schon mal irgendwo so gelesen hab (und ist auch 
leicht verständlich)^^

von Cyblord -. (cyblord)


Lesenswert?

Frank M. schrieb:

> Nein. PINA0 ist eine Konstante(!)

Nicht das dies schon vorher angemerkt worden wäre. Entweder er liest die 
Posts nicht oder ihm ist nicht klar, dass eine Konstante Konstante 
heißt, weil sich ihr Wert niemals ändert.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

cyblord ---- schrieb:
> Frank M. schrieb:
>
>> Nein. PINA0 ist eine Konstante(!)
>
> Nicht das dies schon vorher angemerkt worden wäre.

Weiß ich, habs gelesen. Aber manchmal muss man etwas wiederholen (und es 
auch mit einem besonderen Satzzeichen (!) kennzeichnen), damit es über 
den langen Weg vom Auge ins Gehirn auch ankommt ;)

von Markus (Gast)


Lesenswert?

cyblord ---- schrieb:
> Nicht das dies schon vorher angemerkt worden wäre. Entweder er liest die
> Posts nicht oder ihm ist nicht klar, dass eine Konstante Konstante
> heißt, weil sich ihr Wert niemals ändert.

Nicht gerade hilfreich, aber egal.
Trotzdem nochmal DANKE, auch für die Geduld (mit jemandem der 
anscheinend seine eigenen Posts nicht ließt...).

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.