/*master.c*/
#include<htc.h>
__CONFIG(HS & WDTDIS & PWRTEN & LVPDIS & BORDIS);
unsigned char _data, i=0x00;
void Init_I2C()
{
TRISC3=0; //SCL
TRISC4=0; //SDA
SSPCON=0x38;
SSPCON2=0x00;
SMP=1;
SSPEN=1;
CKE=0;
SSPIF=0;
BCLIF=0; //bus collision flag
SSPADD=0x63;
SEN=1;
TRISB=0x00;
PORTB=0x00;
TRISD7=0;
RD7=0;
}
void main()
{
Init_I2C();
while(1)
{
SEN=1;
ACKSTAT=1;
i=0;
RCEN=1;
ACKEN=1;
while(SSPIF==0);
SSPIF=0;
SSPBUF=i;
i++;
while(SSPIF==0);
SSPIF=0;
SSPBUF=i;
i++;
while(SSPIF==0);
SSPIF=0;
PEN=1;
while(SSPIF==0);
SSPIF=0;
delay_Nms(100);
}
}
/*slave.c*/
#include<htc.h>
__CONFIG(HS & WDTDIS & PWRTEN & LVPDIS & BORDIS);
unsigned char _data;
void Init_I2C()
{
TRISC3=1; //SCL
TRISC4=1; //SDA
SSPCON=0x3E; //slave mode
SSPCON2=0x00;
SMP=1;
ei();
CKE=0;
CKP=1;
SSPEN=1;
SSPIF=0;
SSPADD=0x69;
BCLIF=0;
TRISB=0x00;
PORTB=0x00;
TRISD7=0;
RD7=0;
SEN=1;
SSPOV=0;
}
void main()
{
Init_I2C();
while(1)
{
PORTB=_data;
}
}
void interrupt ISR(void)
{
if(SSPIF)
{
if(RW==1)
{
RD7=1;
_data=SSPBUF;
CKP=1;
}
SSPIF=0;
}
}