#include <18F252.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)


#use i2c(SLAVE,slow, SDA=PIN_C4, SCL=PIN_C3, address=0xa0, force_hw)
BYTE address, buffer[0x10], i;

#INT_SSP
void ssp_interupt ()
{
   BYTE incoming, state;
   disable_interrupts(GLOBAL);

   
   state = i2c_isr_state();

   if(state < 0x80)                     //Master is sending data
   {
      
      incoming = i2c_read();
      OUTPUT_B(incoming);
      output_bit( PIN_A0, 1);

      if(state == 0)                     //First received byte is address
         {
         address = incoming;
         output_bit( PIN_A1, 1);
         }
      if(state >= 1)                     //Second received byte is data
         {
         output_bit( PIN_A2, 1);
         buffer[address] = incoming;
         }
   }
   output_bit( PIN_A3, 1);
   if(state >= 0x80)                     //Master is requesting data
   {
      i2c_write(buffer[address]);
      output_bit( PIN_A4, 1);
   }
   OUTPUT_B(state);
   output_bit( PIN_A5, 1);
   enable_interrupts(GLOBAL);
}

void main ()
{
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_SSP);
   
   for (i=1;i<=10;++i)
      {
      buffer[i]=i+100;
      }
   while (TRUE) {}
}
