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.
Gast
#2471831
PIND ist etwas anderes als PORTD...
Gast
#2471833
>Ich weiß leider nicht mehr weiter und benötige Hilfe.
Lass dir den Wert vonm PIND anzeigen, dann siehst du wo es klemmt.
Musst natürlich vorher die nicht benutzten Bits maskieren. temp=PIND & b01111100; switch (temp) . . .
Gast
#2471871
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ß...
Vielen Dank für den Tipp. Ich konnte das Problem mit > volatile char temp; > temp=PIND & b01111100; > switch(temp) lösen.
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?
Gast
#2472444
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.