Forum: Mikrocontroller und Digitale Elektronik switch-Anweisung AVR


von Stephan W. (wille)


Lesenswert?

Hallo zusammen,
ich habe ein Problem mit dem switch Befehl.Ich möchte vom Port D die 
Bits 2 bis 6 einlesen um 19 Eingangskombinationen auszuwerten. Leider 
fällt der switch direkt zu default durch. Ich habe folgendes 
programmiert:

switch (PIND)
{ case 0x04: Anweisungen; break;
.
.
.
 case 0x4C: Anweisung; break;
 default: Anweisung; break;
}

Ich weiß leider nicht mehr weiter und benötige Hilfe.
Danke schön.

von Der müde Joe (Gast)


Lesenswert?

PIND ist etwas anderes als PORTD...

von holger (Gast)


Lesenswert?

>Ich weiß leider nicht mehr weiter und benötige Hilfe.

Lass dir den Wert vonm PIND anzeigen, dann siehst du wo es klemmt.

von H.Joachim S. (crazyhorse)


Lesenswert?

Musst natürlich vorher die nicht benutzten Bits maskieren.
temp=PIND & b01111100;
 switch (temp)
.
.
.

von camikusch (Gast)


Lesenswert?

H.joachim Seifert schrieb:
> temp=PIND & b01111100;

ich denke es ist generell eine gute idee einen pin-wert vor einer 
auswertung in eine variable zu packen. ist zwar wahrscheinlich das c den 
aktuellen wert eh in ein register packt in nicht jedesmal ein cmp mit 
dem jetzigen pin-wert macht - aber wer weiß...

von Stephan W. (wille)


Lesenswert?

Vielen Dank für den Tipp. Ich konnte das Problem mit
 > volatile char temp;
 > temp=PIND & b01111100;
 > switch(temp)
lösen.

von Uwe (de0508)


Lesenswert?

Hallo

Stephan Wilhelm schrieb:
>>volatile char temp
>  >temp=PIND & b01111100

und warum volatile - kennst Du die Bedeutung ?

Mach doch keinen Sinn, da temp nur eine lokale und temporäre Variable 
ist?

von Stone (Gast)


Lesenswert?

volatile char temp
Das volatile würde ich weglassen. Kostet dich nur Speicher und 
Geschwindigkeit.
Hätte auch eher einen uint_8 als nen Char verwendet.

Gruß Matthias

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.