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.