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