TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: J1M en 18 de Febrero de 2005, 12:51:00

Título: Como interpreto este comando???
Publicado por: J1M en 18 de Febrero de 2005, 12:51:00
funcion1((1 << var1) | (1 << var2));

var1= 2
var2= 8

no se como calcular el valor que le estoy pasando a la funcion1 :S

y este otro?
PORTB &= ~(0x01 << var1);  // creo q se interpreta por var1 = 0
PORTB |= 0x01 << var1; // creo q es un var1 = 1

y por ultimo...

SPCR = (0x01 << SPE) | (0x01 << MSTR) | (0x01 << CPOL);

Gracias por adelantado!

Salu2!
Título: RE: Como interpreto este comando???
Publicado por: Nocturno en 18 de Febrero de 2005, 23:30:00
En el primer caso estas pasando como parametro a la funcion1 un numero con todos los bits a 0, excepto los que ocupan las posiciones var1 y var2, que estaran a 1. En el caso que pones como ejemplo, el numero que pasas es 100000100, o sea, 260 en decimal.

En el segundo caso, la instruccion PORTB &= ~(0x01 << var1); te pone a 0 el pin de PORTB que ocupe la posicion var1.
Por el contrario, La instruccion PORTB |= 0x01 << var1; te pone a 1 dicho pin.

Despues de ver la respuesta del primer caso, el ultimo es facil ¿no?
Título: RE: Como interpreto este comando???
Publicado por: Ignite en 19 de Febrero de 2005, 04:50:00
En el compilador Hi-tech (1 << var1)  significha shiftar(o rotar) var1 un bit a la izquierda. Pues el resultado sería el siguiente:
var1=2 equivale en binario(suponiendo que son 8bits)  0000 0001
var2=8 equivale en binario(suponiendo que son 8bits)  0000 1000

(1<<var1)=0000 0010
(1<<var2)=0001 0000

y el resultado después de hacer la OR = 0001 0010 = 18 decimal
Pues este es el valor que le pasas a la funcón1.

PORTB &= ~(0x01 << var1)    Creo que equivale a PORTB =PORTB & (~(0x01 << var1)) dónde ~ equivale a complementar el valor, osea cambiar los 1 por 0 y los 0 por 1.


SPCR = (0x01 << SPE) | (0x01 << MSTR) | (0x01 << CPOL)
Habiendote contado la primera la puedes deducir fácilmente
Título: RE: Como interpreto este comando???
Publicado por: J1M en 19 de Febrero de 2005, 06:26:00
Gracias a los 2 Sonrisa , estoy usando el CCS, y por las respuestas creo q lo q dice nocturno se ajusta al resultado que obtengo.

Gracias Sonrisa
Título: RE: Como interpreto este comando???
Publicado por: Nocturno en 19 de Febrero de 2005, 10:52:00
Me alegro haber acertado, porque la verdad es que es un buen lío.

Ignite, creo que lo que tú comentas lo has interpretado justo al reves, a ver:
1<<var1 es "empujar el 1 hacia la izquierda var1 veces"
y tú lo has entendido como
"var1(que es 00000010) se empuja hacia la izquierda 1 vez."

¿no es así?
Título: RE: Como interpreto este comando???
Publicado por: J1M en 19 de Febrero de 2005, 12:03:00
si creo q estaba bien interpretado...sino mira mira jajajaja.. aun me queda mucho para postear una libreria en condiciones... pero ya hace algo.. jiijij



ufff las peleas que me ha costado con el pic!!!

Salu2!
Título: RE: Como interpreto este comando???
Publicado por: kruskal en 20 de Febrero de 2005, 17:05:00
Realmente el Operador << es un lio. Podrias explicarlo bien por favor aun no logro entenderlo, cuando necesitos realizar operacion de dezplazamiento de bit recurro al uso de las instrucciones shift left y right que son entendibles.

Salud2
Título: RE: Como interpreto este comando???
Publicado por: Nocturno en 21 de Febrero de 2005, 06:16:00
Pues según lo entiendo yo, los operadores << y >> se comportan como shift_left() y shift_right() respectivamente, pero para una única variable y rellenando el nuevo bit siempre con un 0.
Título: RE: Como interpreto este comando???
Publicado por: Ignite en 24 de Febrero de 2005, 13:43:00
Jaja vaya por dios pues si ke metí la pata loco la verdad es ke no se pq lo dije al revés pero bueno..... pues eso ke es tal y como comenta Nocturno66.
Lo siento si os he podido liar.