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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.