a = ~a; will nicht auf Attiny2313

Gast #3170749
Lesenswert?

Hi,
also ich versteh`s nicht:

ich will ein Byte komplett invertieren da ich einen knopf polle, der 
nach gnd schaltet. Ich möchte aber ein true haben, wenn ich das ding 
drücke.
1
uint8_t readButton ()
2
{
3
  
4
  btnStatus = PIND & (1<<PD3);
5
  btnStatus = ~btnStatus;         // für positive logik
6
  
7
  return btnStatus;
8
}

nehme ich die Zeile mit dem kommentar weg gehts und der knopf schaltet 
eine LED.

Der Controller ist ein ATTiny 2313, AVR Studio 6.1 in einer virtualbox.

hier geht der return Wert hin:
1
    if (readButton())      
2
    {
3
      rCh = 0;
4
    }
5
    else
6
    {
7
      rCh = 255;
8
    }
Die funktion kann ich auch direkt implementieren, es geht nicht mehr 
sobald ich die Sache mit dem ~ mache ...

ist doch bestimmt was ganz banales oder ?


mfg
P
Moderator #3170758
Lesenswert?

Logisch (im wahrsten Sinne des Wortes), dass immer der If- und nie der
Else-Zweig ausgeführt wird.

Vielleicht wolltest du eher
1
  btnStatus = PIND & (1<<PD3);
2
  btnStatus = !btnStatus;         // für positive logik

oder
1
  btnStatus = ~PIND;              // für positive logik
2
  btnStatus &= 1<<PD3;

schreiben.
Gast #3170776
Lesenswert?

hey Yalu danke!

ihr seid so verflucht schnell in diesem Forum...

ja, jetzt gehts.

mir geht gerade ein Licht auf.

wenn PD3 = 1 dann habe ich 0b00001000
wenn PD3 = 0 dann habe ich 0b00000000
mache ich dann jeweils ~ erhalte ich
einmal 0b11110111
und
einmal 0b11111111
Beides ist also true.
nur was macht ! mit meinem Byte?
anscheinend wird alles was größer 0 ist = 0
und alles was 0 ist wird 1 ?
richtig?

schaue hier morgen wieder rein.

danke und gute nacht
Gast #3170922
Lesenswert?

Hi,

also nochmal das ichs auch kapiere. Ich habe euch jetzt so verstanden 
das folgendes gilt:

angenommen ich lese PIND und PD3 ist High
ich habe dann
myByte = 0b00001000;(=PIND)
mache ich
myByte = !myByte
ist danach
myByte= 0x00
mache ich dass dann nochmal dann erhalte ich:
myByte = !myByte
myByte = 0b00000001

right?

mir ist klar das ich das ganze auch im if() umkehren könnte
also if(!(readButton)) {} das wäre die mir bekannte anwendung vom not, 
nämlich in wahr/falsch prüfungen.
nur was ! mit den Bits eines Bytes macht, war mir nocht so ganz klar...
Grüße
P

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren