Hallo Ich habe eine Verständnisfrage und zwar habe ich folgenden Code geschrieben: #include <avr/io.h> int main(void) { DDRD|= (1<<PD0); PORTC|=(1<<PC0); //Aktivierung des Pull-up PORTD=0xFF; //Alles LEDS aussschalten while(1) { if (!(PINC&(1<<PC0))) { PORTD&= ~((1<<PD0)); //LED ein; } } } Der Taster an PC0 wird gerdrückt und die LED an PD0 leuchtet das klappt auch.Ich verstehe aber nicht wieso, deswegen erkläre ich mal kurz wie ich das alles verstanden habe: PINC= ist binär 0b'0000 0000' wird eine Taste gedrückt wird aus PINC= 0b'0000 0001' setze ich dieses in meine if-anweisung if(!(PINC&(1<<PC0)))--> if(!(0b'0000 0001'&(0b'0000 0001'))) 0b0000 0001 & 0b0000 0001 = 0000 0001 dann wird das ganze negiert durch ! und ich erhalte 1111 1110??? Wieso leuchtet die LED trotzdem ich hätte erwartet das sie nur bei 0b'1111 1111' leuchtet. Kann mir einer das genau erklären damit ich es in den Kopf krieg?
Azubi schrieb: > PINC= ist binär 0b'0000 0000' eher nicht. Tasten werden so angeschlossen, dass sie ein 1 Bit liefern, wenn sie nicht gedrückt sind und den Portpin auf 0 ziehen, wenn sie gedrückt sind. > if(!(PINC&(1<<PC0)))--> if(!(0b'0000 0001'&(0b'0000 0001'))) > > 0b0000 0001 & 0b0000 0001 = 0000 0001 dann wird das ganze negiert durch > ! Nicht ganz. Bits negieren wäre ~ ! ist aber die logische Nagation Aus 0 mach 1 Aus allem ungelich 0 mach 0 denn 0 ist logisch falsch alles ungelich 0 ist logisch wahr. > und ich erhalte 1111 1110??? Wieso leuchtet die LED trotzdem ich hätte > erwartet das sie nur bei 0b'1111 1111' leuchtet. Das wiederrum wäre egal. Denn sowohl 1111 1110 als auch 1111 1111 sind ungleich 0 und somit für die if-Abfrage gleichermassen mit 'wahr' zu bewerten. Also: neue Ausgangssituation: der Pin ist auf 1 wenn die Taste NICHT gedrückt ist und von dieser Ausgangssituation alles nochmal neu durchgehen.
>Das wiederrum wäre egal.
Denn sowohl 1111 1110 als auch 1111 1111 sind ungleich 0 und somit für
die if-Abfrage gleichermassen mit 'wahr' zu bewerten.
Danke das hat sehr weitergeholfen
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.