ATMEGA8 - toggle Befehl

Gast #1754441
Lesenswert?

Hallo,

kleine Frage zum ATMEGA 8.

folgendes funktioniert als Schleife einwandfrei:
1
PORTC ^= (1<<PC5);  /* LED am PC5 umschalten */
2
_delay_ms(1000);  /* eine Sekunde warten*/

folgendes funktioniert nicht:
1
PORTC ^= (0<<PC5);  /* LED am PC5 umschalten */
2
_delay_ms(1000);  /* eine Sekunde warten*/

meine Frage: warum?

Ich tue doch überall das gleiche:
Ich schalte PC5 um. Also entweder von 0 auf 1 oder von 1 auf 0.

Kann mir das jemand erklären?

Grüße

Sebastian
Gast #1754446
Lesenswert?

>>folgendes funktioniert als Schleife einwandfrei:

woher weiß der Controller dass er sonst die Befehle wiederholen soll?

Wenn du ständig toggeln willst muss es natürlich in einer Schleife 
stehen.
#1754449
Lesenswert?

Du solltest Dir mal aufdröseln, was genau da eigentlich genau steht:

(1<<PC5) bedeutet ja, nehme die "1" und schiebe sie um "PC5" Stellen 
nach links. PC5 hat hier den Wert 5. Also kommt bei einer 8Bit Zahl 
heraus: 0010 0000. Wenn Du nun also (0<<PC5) schreibst, kommt einfach 
0000 0000 heraus. Somit änderst du am PORTC garnichts mehr.

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