TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: pentax33 en 08 de Marzo de 2007, 20:13:14

Título: Una qüestion sobre las estructuras (struct)
Publicado por: pentax33 en 08 de Marzo de 2007, 20:13:14
Hola gente.

Primeri decir que el foro es muy interesante i que m'he ha permitido de aprender mucho sobre los microcontroladores.

Mi qüestion es la siguiente: Estoi tratando de realizar un programa en CCS i un pic 16F876, en el pretendo leer el estado de un PCF8574 atraves de i2c, esto ya lo tengo resuelto, mi problema llega quando quiero passar los valores de las 8 entradas a una estructura.

El proceso seria el siguiente:

Primero creo una estructura de 8 bits del tipo boolean

struct Entradas {
            boolean E0;
            boolean E1;
            boolean E2;
            boolean E3;
            boolean E4;
            boolean E5;
            boolean E6;
            boolean E7;
};

struct Sortides {
            boolean S0;
            boolean S1;
            boolean S2;
            boolean S3;
            boolean S4;
            boolean S5;
            boolean S6;
            boolean S7;
};
//Variables de tipus global
int act=0xFF;
int des=0x5F;
Creo dos variables con la estructura.
struct Entrades I000,I001;
struct Sortides Q100;

void main(){
//Variables de tipus local
int captura_IN;
int captura_OUT;

//inicialitza LCD
lcd_init();

//Inicialització del procesador
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);

//Habilitem la interrupcio per INT.
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
ext_int_edge(L_TO_H);

//Blucle de programa
while (1){
   restart_wdt();

   //lectura de entrades digitals
   i2c_start();
   i2c_write(0b01000011);     // Device address

En teoria creo que asigno el valor del byte recibido a una de las variables que he creado

   I000=i2c_read(1);      <------------- Este punto no ser si es correcto, si realmente puedo passar directamente el valor del puerto i2c a la estructura.
   i2c_stop();

/*   if (captura_IN,0)             <----------- Este es el primer metodo que se m'he ha ocurrido para       passar estado de las entradas a la estructura.
      I000.E0=1;
   else
      I000.E0=0;
   if (captura_IN,1)
      I000.E1=1;
   else
      I000.E1=0;
   if (captura_IN,2)
      I000.E2=1;
   else
      I000.E2=0;
   if (captura_IN,3)
      I000.E3=1;
   else
      I000.E3=0;
*/
   //Programa

   //Complementem les sortides per que act=1 des=0
   Q100=0xff - Q100;         <-------Este punto me da error al compilar en (- Q100)

   //Actualitzem sortides
   i2c_start();
   i2c_write(0b01000000);
   i2c_write(Q100);
   i2c_stop();
}
}

No ser si lo he expuesto demasiado bien si teneis alguna pregunta la respondre con mucho gusto.

GRACIAS POR TODO
Título: Re: Una qüestion sobre las estructuras (struct)
Publicado por: microman en 12 de Marzo de 2007, 18:28:55
Para q utilizas la estructura Q100..? Que valor tiene los bits de tu estructura..?Donde se los inicializa o se los carga..?Si es a solo efecto de almacenar el estado de salidas y enviarlos al i2C mejor seria q utilices una simple variable. Recuerda q no todas  las operaciones con el nombre de una variable de estructura está permitido.


Si no tienes mas remedio en utilizar dicha estructura podrias si utilizar una variable aux y luego realizar la asignación a dicha estructura.....seria algo asi..
Citar
*/
   //Programa
   // En algun lugar de tu codigo tendras q declarar, inicializar o cargar con un valor
   //Complementem les sortides per que act=1 des=0

   aux=!aux;


   //Q100=0xff - Q100;         <-------Este punto me da error al compilar en (- Q100)
   Q100=aux;
   //Actualitzem sortides
   i2c_start();
   i2c_write(0b01000000);
   i2c_write(Q100);
   i2c_stop();
}
}


Espero t sirva....

Saludos