TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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
-
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..
*/
//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