/***************************************************
*
* esclavo_ag_1.c
*
***************************************************/
#include "esclavo_ag_1.h"
//define bit a bit
#BIT SSPIF = 0xF9E.3 //PIR1 bit 3
#BIT SSPOV = 0xFC6.6 //SSPCON1 bit 6
#BIT BF = 0xFC8.0 //SSPSTAT bit 0
#BIT RW = 0xFC7.2 //SSPSTAT bit 2
#BIT DA = 0xFC7.5 //SSPSTAT bit 5
char lectura;
#int_SSP
void SSP_isr(void)
{
if (SSPIF == 1) // interrupcion por SSP
//if(bit_test (PIR1, 3))
{
if (SSPOV == 1) // si hay overflow leo el buffer y borro dicho flag
//if(bit_test (SSPCON1, 6)) // return 0 o 1
{
//lectura = read_i2c(1);
lectura=i2c_read(1);
output_High(PIN_B6);// añado para vericar entro
SSPOV = 0;
//bit_clear(SSPCON1,6); //limpio bit 6 del SSPCON1
}
else // si no hay overflow proceso el dato
{
if (BF == 1) // si hay dato
//if(bit_test (SSPSTAT, 0))
{
if (RW == 0) // esclavo para escritura
//if(bit_test (SSPSTAT, 2))
{
//lectura = read_i2c(0);
lectura=i2c_read(0);
if (DA == 1)
//if(bit_test (SSPSTAT, 5))
{
PORTB = lectura; // si llego un dato, lo mando al puerto
printf("\n\n lectura: %d"lectura);
}
}
}
if (RW == 1)
//if(bit_test (SSPSTAT, 2))
{
//write_i2c(0x77); // esclavo para lectura
i2c_write(0x77); // esclavo para lectura
output_High(PIN_B7);// añado para vericar entro
}
}
SSPIF = 0;
//bit_clear(PIR1, 3);
}
}
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
set_tris_b(0x00);
enable_interrupts(INT_SSP);
enable_interrupts(GLOBAL);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
// TODO: USER CODE!!
printf("\n\r ESCLAVO: ");
while(true){
}
}