Go Down

Topic: duda lenguaje c (solucionado) (Read 902 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.

SrDonGato


Regata

de nada para eso estamos!! me alegro de que lo solucionaras. un saludo

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
* Si preguntas, pon el código de tu programa, hace mucho mas fácil ayudarte. Y me ahorro un mensaje pidiendo que lo hagas.
* Si consigues solucionar tu problema, dedica unos minutos a explicar en tu post como lo conseguiste para beneficio de todos.
* Cambia el 'Subject' de tu hilo y añade 'SOLUCIONADO' cuando hayas llegado a una solución al problema que planteaste.
* Utiliza un 'Subject' para tu hilo que explique de que va el hilo.
Si estas empezando:
* Comienza a usar Arduino
* Guías de iniciación a Arduino
* Ejemplos
* Referencia del Lenguaje
* Conceptos básicos
Guia de usuario de arduino
Tutoriales en Ingles
Si necesitas que alguien te escriba el código: http://www.freelancer.com/  o esta  http://www.guru.com/

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.

aero_yo


Go Up