Logu KS
Member level 2

Code:
/* I2C */
/* Header file */
#include<pic18.h>
#include<TIMER.h>
#define _XTAL_FREQ 4E6
void I2Cinit(void);
void I2Cstart(void);
void I2Cstart(void);
void I2Cstop(void);
void I2CsendACK(void);
void I2CsendNACK(void);
void I2Cwait(void);
void I2Csend(unsigned char dat);
bit I2Cwritebyte(unsigned char dat);
unsigned char I2Creadbyte(unsigned char ack);
/* I2C Functions */
void I2Cinit(void)
{
TRISC3 = 1; // SCK as input
TRISC4 = 1; // SDA as input
SSP1STAT |= 0x80; // Slew rate control enable for high speed mode for standard speed
SSP1CON1 = 0x38; // I2C master mode and SCK and SDA as serial pins
SSP1CON2 = 0x00;
SSP1ADD = 9;
}
void I2Cstart(void)
{
I2Cwait();
SEN = 1; // Start enable bit
//SSPCON2 bit 0
while (SEN == 1);
}
void I2Crestart(void)
{
I2Cwait();
RSEN = 1; // Restart enable bit
//SSPCON2 bit 1
while (RSEN == 1);
}
void I2Cstop(void)
{
I2Cwait();
PEN=1; // Stop enable bit
while(PEN==1);
//continue;
}
void I2CsendACK(void)
{
ACKDT = 0; // 0 = ACK
ACKEN = 1; // Sending ack
while(ACKEN);
}
void I2CsendNACK(void)
{
ACKDT = 1; // 1 = NACK
ACKEN = 1; // Sending nack
while(ACKEN);
}
void I2Cwait(void)
{
while ( ( SSP1CON2 & 0x1F ) || ( SSP1STAT & 0x04 ) );
}
void I2Csend(unsigned char dat)
{
SSP1BUF = dat;
while(BF);
I2Cwait();
}
bit I2Cwritebyte(unsigned char dat)
{
SSP1BUF = dat;
while(BF);
return 0;
//I2Cwait();
}
unsigned char I2Creadbyte(unsigned char ack)
{
unsigned char temp;
I2Cwait();
RCEN=1;
I2Cwait();
temp = SSP1BUF;
I2Cwait();
if (ack)ACKDT=0;
else ACKDT=1;
ACKEN=1;
return( temp );
}
/* Main */
void main()
{
I2Cinit();
I2Cstart();
I2Csend('M');
I2CsendACK();
I2Cstop();
while(1)
{}
}
this is my i2c code while compiling there is no error and warning in mplab ide
when i put it in proteus it is showing spurious scl transition detected...