Autor Tema: que hace byte=(0xa0 | ((make8(maddress,2))<<1));  (Leído 1144 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
que hace byte=(0xa0 | ((make8(maddress,2))<<1));
« en: 25 de Agosto de 2011, 09:46:51 »
hola gente. queria ver si me pueden desir que hace esta linea por favor:


 int8 byte;
 int32 maddres;
 byte=(0xa0 | ((make8(maddress,2))<<1));


se que | es una or de bit,  tambien que << es un desplazamiento a la izquierda y make8 es una rotación de bit
pero en general no entiendo bien que hace :oops:


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: que hace byte=(0xa0 | ((make8(maddress,2))<<1));
« Respuesta #1 en: 07 de Septiembre de 2011, 12:59:43 »
Seguramente es el byte de control para acceder de una memoria eeprom o algún dispositivo. 0xA0 es fijo, el tercer byte (no es segundo!) de maddress contiene la dirección particular del dispositivo i2c. Lo rota 1 a le izquierda porque el primer bit es para indicar si se necesita realizar una escritura o lectura sobre el dispositivo.

De esa manera, el tercer byte de maddres tiene que tener un valor como es siguiente: 0b00000xxx. Entonces al hacer la operación mostrada queda:

byte=0b1010xxx0


Saludos!
No contesto mensajes privados, las consultas en el foro