Or And

Che cosa cambia fra:

TCCR2B &= ~(1<<CS21);

e..

TCCR2B |= ~(1<<CS21);

Prende il registro e....

Un OR è una somma logica, si usa fare così quando si vuol essere sicuri che un bit assuma valore 1 in ogni caso.
1 OR 0 = 1
1 OR 1 = 1

Un AND restituisce invece 1 solo quando entrambi i bit sono a 1
1 AND 0 = 0
1 AND 1 = 1
0 AND 1 = 0

Però normalmente i codici citati NON si usano nella seconda forma che hai usato.
TCCR2B |= ~(1<<CS21);

Di solito è:
TCCR2B |= (1<<CS21);

Questa forma deve restituire 1, quindi il NOT (abbreviato dal simbolo ~) non si usa con l'OR ma solo con l'AND. Difatti questa forma:
TCCR2B &= ~(1<<CS21);
serve a porre a 0 il bit CS21 indipendentemente dal valore che ha nel registro TCCR2B

Si, ho sbagliato a scrivere.Grazie mille ho capito ma.... :open_mouth::slight_smile:
Ma posso scrivere direttamente:

TCCR2B &= (0<<CS21);

E lecito? XD suppongo di no però.....

No. Il segno "<<" è uno spostamento a SX del bit 1 di tante posizioni quanto è il valore rappresentato dal registro in uso.
Spostare il bit 0 equivale a non spostare nulla.
Cioè
0<<4 equivale a 0
1<<4 equivale a 16

Trovi di piú su

Sono operazioni a livello di singoli bit. Vene fatto un and/or/xor bit per bit di un bte o di un registro.

Queste operazioni vengono usate per settare o cancellare singoli bit all interno di un byte o un registro senza cambiare gli altri.

Ciao Uwe