Go Down

Topic: duda lenguaje c (solucionado) (Read 919 times) previous topic - next topic

SrDonGato

Sep 08, 2011, 01:28 am Last Edit: Sep 08, 2011, 02:13 am by SrDonGato Reason: 1
alguein me explica por favor que significa esta linea ?

Quote
PORTB &= ~(1<<SPI_CS);



Regata

#1
Sep 08, 2011, 01:38 am Last Edit: Sep 08, 2011, 01:39 am by Regata Reason: 1
Pues mira &= es una and binario compuesto, el simbolo ~ es un not binario y << es desplazamiento de bit a la izquierda, por tanto me parece que lo que realiza seria lo siguiente:

PORTB = PORTB && (~(1<<SPI_CS));

Es decir hace una and binaria entre lo que hay en PORTB y lo que hay en el registro SPI_CS desplazado un bit a la izquierda pero negado y lo guarda en PORTB.
Visita: http://www.tallerarduino.com

SrDonGato


Regata

de nada para eso estamos!! me alegro de que lo solucionaras. un saludo
Visita: http://www.tallerarduino.com

coleoptero


Pues mira &= es una and binario compuesto, el simbolo ~ es un not binario y << es desplazamiento de bit a la izquierda, por tanto me parece que lo que realiza seria lo siguiente:

PORTB = PORTB && (~(1<<SPI_CS));

Es decir hace una and binaria entre lo que hay en PORTB y lo que hay en el registro SPI_CS desplazado un bit a la izquierda pero negado y lo guarda en PORTB.


'Regata' me confundo si lo que querías poner en realidad y tal y como perfectamente explicas es:

PORTB = PORTB & (~(1<<SPI_CS));

coLe.
Consejos para hacer un correcto uso de los foros.

http://arduino.cc/playground/Es/Consejos

Igor R

#5
Sep 08, 2011, 12:11 pm Last Edit: Sep 08, 2011, 12:15 pm by Igor R Reason: 1
Pues yo no estoy de acuerdo, para variar..... je,je,je

Quote
lo que hay en el registro SPI_CS desplazado un bit a la izquierda

SPI_CS es el numero de bits a desplazar=>http://arduino.cc/en/Reference/Bitshift
(variable << number_of_bits)


;)


coleoptero

'Igor R' ¡Qué razón tienes!

¿Se podría resumir así?

PORTB &= ~(1<<SPI_CS);  //Pone a cero el bit que ocupa la posición indicada en SPI_CS del valor contenido por PORTB.

coLe.
Consejos para hacer un correcto uso de los foros.

http://arduino.cc/playground/Es/Consejos

Igor R

Eso me suena mejor... ;)

Aunque un Serial.println(PORTB,BIN) y/o un Serial.println(~(1<<SPI_CS),BIN), sirve para aprender lo que hacen estas cosas...


:)

Sergegsx

buena explicación, todavia no he tendido que enfrentarme a todo esto de bitshift, pero creo que deberia cogerme unos ejemplos y ver que utilidad real tiene porque igual me estoy perdiendo algo importante jeje.

gracias por la explicación Igor

Igor R

#9
Sep 08, 2011, 03:27 pm Last Edit: Sep 08, 2011, 03:32 pm by Igor R Reason: 1
Es muy usado para multiplicar/dividir por factores de 2.
Y lo ves a menudo para configuracion de registros del micro, ya que tienes un include con todos los nombres de registros y bits del micro (igual que el datasheet). Entonces haces cosas del tipo:
ADMUX=(1<<ADLAR)|(0<<REFS1)|(1<<REFS0)|(0<<MUX3)|(1<<MUX2)|(0<<MUX1)|(1<<MUX0);
o como el ejemplo que ha puesto SrDonGato.
Tambien para poder juntar varios bytes en una variable, mascaras, etc

;)

Regata

Sí se me colo un & pero sí era eso lo que quería poner, el SPI_CS pensé que era un registro, no habia mirado en el datasheet, pero si es una variable pues eso mismo. Lo de mirar con el Serial.print siempre ayuda mucho para depurar los programas.
Visita: http://www.tallerarduino.com

aero_yo

Os dejo un enlace a un tuto de AVRfreaks que lo explica todo todo todo

http://www.avrfreaks.net/index.php?name=pnphpbb2&file=viewtopic&t=37871

Go Up