Hallo @ll ! Ich bin nicht mehr blutjunger Anfänger in Sachen avr c programmieren und hab auch Schon so einige Programme erstellt. Dennoch hab ich noch eine ganz wichtige GrundsatzFrage. Ich hab immer wieder Probleme mit der Schreibweise. Was ist eigentlich der Unterschied zwischen z.b. TCCR0B = (1<<COM1A1)|(1<<WGM11); und TCCR0B |= (1<<COM1A1)|(1<<WGM11); Ich verwende immer die 2te Schreibweise. In manchen c Programmen stehts aber auch anders. Wo liegt da der Unterschied ? Lg
Reinhard Schopf schrieb: > TCCR0B = (1<<COM1A1)|(1<<WGM11); Hier werden die beiden Bits COM1A1 und WGM11 auf "1" gesetzt, alle anderen auf "0". > TCCR0B |= (1<<COM1A1)|(1<<WGM11); Hier werden die beiden Bits COM1A1 und WGM11 auf "1" gesetzt, alle anderen bleiben unverändert. Gruß Dietrich
Gast
#2890170
TCCR0B = (1<<COM1A1)|(1<<WGM11) beschreibt das gesamte Register mit 6 0en und 2 1en an den entsprechenden Bit-Positionen. Alles was vorher drinstand ist überschrieben. TCCR0B |= (1<<COM1A1)|(1<<WGM11) bedeutet TCCR0B = TCCR0B | ((1<<COM1A1)|(1<<WGM11)) also eine veroderung des alten Inhalts mit dem rechten teil D.h. im Endeffekt werden genau zwei Bits gesetzt, der Rest bleibt unverändert. Rücksetzen geht analog mit TCCR0B &= ~((1<<COM1A1)|(1<<WGM11))
Danke euch ! Jetzt verstehe ich es ! :-)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.