Autor Tema: Como interpreto este comando???  (Leído 1881 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Como interpreto este comando???
« 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!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: Como interpreto este comando???
« Respuesta #1 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?

Desconectado Ignite

  • PIC16
  • ***
  • Mensajes: 107
RE: Como interpreto este comando???
« Respuesta #2 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

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: Como interpreto este comando???
« Respuesta #3 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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: Como interpreto este comando???
« Respuesta #4 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í?

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: Como interpreto este comando???
« Respuesta #5 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!

Desconectado kruskal

  • PIC16
  • ***
  • Mensajes: 108
RE: Como interpreto este comando???
« Respuesta #6 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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: Como interpreto este comando???
« Respuesta #7 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.

Desconectado Ignite

  • PIC16
  • ***
  • Mensajes: 107
RE: Como interpreto este comando???
« Respuesta #8 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.


 

anything