Hola a todos, les pido su ayuda con esta comunicacion de dos pic. pase el fin de semana con esto y no doy con el problema. aqui les adjunto los codigos:
//////// MAESTRO ///////
#include <18f4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=10000000)
#use i2c(MASTER, SDA=PIN_C0, SCL=PIN_C1)
void main(void)
{
while(TRUE)
{ i2c_start(); //inicio
i2c_write(7); //direccion del esclavo
delay_ms(3);
i2c_write(baja); //enviamos un dato, p.e el entero 6
delay_ms(3);
i2c_stop(); //parada
delay_ms(1000);
}
}
//////// ESCLAVO ////////
#include <18f4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=10000000)
#use i2c(SLAVE, SDA=PIN_C0, SCL=PIN_C1, address=0xa0)
void ssp();
int address, buffer,state,dato,flag=0;
void main ()
{
enable_interrupts(GLOBAL);
enable_interrupts(INT_SSP);
while (TRUE) {}
}
#INT_SSP
void ssp()
{
flag=1; // ESTE FLAG NUNCA SE PONE A 1, ES DECIR, NO HACE LA INTERRUPCION
state = i2c_isr_state();
if(state < 0x80) //El Master esta enviando un dato
{
buffer = i2c_read();
if(state == 1) //Primer byte recibido es la direccion
address = buffer;
if(state == 2) //Segundo byte recibido es el dato
dato = buffer;
}
if(state == 0x80) //Master quiere un dato, pero no quiero enviar nada
{ // por eso lo dejo en blanco
delay_cycles(1);
}
}