Go Down

Topic: Or And (Read 409 times) previous topic - next topic

xSanciopanzax

Che cosa cambia fra:

TCCR2B &= ~(1<<CS21);

e..

TCCR2B |= ~(1<<CS21);

Prende il registro e....


leo72

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

xSanciopanzax

Si, ho sbagliato a scrivere.Grazie mille ho capito ma.... :smiley-surprise::)
Ma posso scrivere direttamente:


TCCR2B &= (0<<CS21);

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

leo72

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

uwefed

Trovi di piú su
http://arduino.cc/en/Reference/BitwiseAnd
http://arduino.cc/en/Reference/BitwiseXorNot
http://arduino.cc/en/Reference/Bitshift

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

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy