Hätte eine Frage zur folgenden syntax: PORTC |= (1<<PC7) | (1<<PC6); Mir ist nicht ganz klar was da genau passiert. AM PORTC werden die bits 7 und 6 gesetzt das weiß ich 1<<PC* warum wird der linksschiebeoperator verwendet. und dann das ganze bitweise mit | verodert? (1<<PC7) | (1<<PC6) ergibt 11000000 und das ganze wird dann mit PORTC verodert und zugewiesen so dass dann PORTC den wert 11000000 hat. bitte um eure comments
1/ Wenn PC7 = 7, dann (1<<PC7) = (1<<7) = 10000000 2/ Wenn PC6 = 6, dann (1<<PC6) = (1<<6) = 01000000 3/ 10000000 | 01000000 = 11000000 4/ PORTC |= 11000000 ist das Gleiche wie PORTC = PORTC | 11000000 5/ PORTC = 11000000 kommt nur raus, wenn PORTC vorher den Wert 0 hat.
PORTC |= (1<<PC7) | (1<<PC6); in PC7 steht im grunde nur eine 7 drin heisst also, eine 1 7 mal nach links verschieben, das selbige mit PC6 eben 6mal nach links. (1<<PC7) | (1<<PC6) ist nichts anderes, als BIT6 und BIT7 setzen dies macht man wegen der uebersichtlichkeit. bei ports ist es nicht so schwer zu sehen, aber man kann sich nicht jedes bit eines registers merken, und so schreibt man eben (1<<AS1) zB. oder wenn sich von controller zu controller wechselst muesstest du die bitnummer zu AC1 alle von hand aendern PORTC |= (1<<PC7) | (1<<PC6); damit wuerdest du den Port so definieren: 0b11xxxxxx (x = unbekannt) anders geschrieben: PORTC = PORTC | (1<<PC7) | (1<<PC6); evtl. erkennst du es so besser mit PORTC = (1<<PC7) | (1<<PC6); damit wuerdest du en Port so definieren: 0b11000000 kleiner tipp schau mal unter artikel nach bitmanipulation
Erstmal danke für die Beiträge: PORTC |= (1<<PC7) | (1<<PC6); damit wuerdest du den Port so definieren: 0b11xxxxxx Also der unterschied zwischen PORTC = und PORTC |= ist mir nicht ganz klar.
> damit wuerdest du den Port so definieren: 0b11xxxxxx
Genau, wobei x die Werte sind, die vorher im Port waren. Bei = wären es
stattdessen Nullen.
hab nochmals überlegt: wenn schon irgendwelche bits am portc gesetzt sind und ich mache eine zuweisung mit portc |= dann bleiben diese Bits gesetzt. Wiederrum wenn ich aber ein PORTC = mach dann werden die alten bits geändert. d.h. der alte wert wird überschrieben. richtig?
portc |= byte ->bleiben die gesetzten bits gesetzt 11111111 00110011 mit oder verknuepft 11111111 ergebis portc = byte ->werden die gesetzten bits geaendert 00110011 11111111 ergebis wenn du nun bits loeschen willst kannst du: portc &= ~((1<<pc6) | 1<<pc7)) schreiben oder eben: portc = portc & ~((1<<pc6) | 1<<pc7)) schreiben das ~() invertiert nur die bits!!
Lass dich nicht durch 1<<PC7 verwirren, deswegen wird der Controller nicht eine 1 siebenmal links schieben. Das ist nur für die Leserlichkeit des Codes. Der Compiler macht da ein 0x80 draus. Du kannst also genauso PORTC|=0x80 schreiben. Wenn nur ein bit gesetzt wird macht dann der Compiler ein sbi draus, sonst einen out Befehl.
Besten Dank für eure guten Antworten. kenn mich jetzt aus! schöne Grüße Ferrice
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.