Pages: [1]   Go Down
Author Topic: duda lenguaje c (solucionado)  (Read 829 times)
0 Members and 1 Guest are viewing this topic.
Ciudad Real
Offline Offline
God Member
*****
Karma: 1
Posts: 751
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

alguein me explica por favor que significa esta linea ?

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

« Last Edit: September 07, 2011, 07:13:26 pm by SrDonGato » Logged

Foz- Lugo
Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: September 07, 2011, 06:39:38 pm by Regata » Logged


Ciudad Real
Offline Offline
God Member
*****
Karma: 1
Posts: 751
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

asias ¡
Logged

Foz- Lugo
Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Forum Moderator
Madrid - Spain
Offline Offline
Full Member
*****
Karma: 5
Posts: 180
'arduinomaníaco'
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Consejos para hacer un correcto uso de los foros.

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

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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)


smiley-wink

« Last Edit: September 08, 2011, 05:15:03 am by Igor R » Logged


Forum Moderator
Madrid - Spain
Offline Offline
Full Member
*****
Karma: 5
Posts: 180
'arduinomaníaco'
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

'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.
Logged

Consejos para hacer un correcto uso de los foros.

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

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Eso me suena mejor... smiley-wink

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


smiley
Logged


0
Offline Offline
Edison Member
*
Karma: 17
Posts: 1413
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

* 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/

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

smiley-wink
« Last Edit: September 08, 2011, 08:32:58 am by Igor R » Logged


Foz- Lugo
Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Madriz
Offline Offline
Full Member
***
Karma: 0
Posts: 176
Glober Arduiner
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: