#include <REGX51.H>
#define SCL P0_0
#define SDA P0_1
void INIT_I2C();
void DELAY();
void DELAY1();
void SEND_DATA(int);
void SEND_DATA1(int);
void GET_DATA();
//void ACK();
//void NAK();
//void MACK();
void START();
void STOP();
/************ MAIN PROGRAMME STARTS HERE ***************/
void main()
{
INIT_I2C();
START();
SEND_DATA(0XA0);
//DELAY1();
SEND_DATA(0X00);
//DELAY1();
SEND_DATA(0X34);
DELAY1();
STOP();
DELAY1();
START();
SEND_DATA(0XA0);
//DELAY1();
SEND_DATA(0X00);
DELAY1();
START();
SEND_DATA(0XA1);
//DELAY1();
GET_DATA();
//DELAY1();
STOP();
while(1);
}
/********************** ******************/
/**** DELAY PGM ****/
void DELAY()
{
unsigned int p;
for(p=0;p<10;p++);
}
/***** *****/
/**** DELAY PGM (10 ms DELAY) ****/
void DELAY1()
{
unsigned int X,Y;
for(X=0;X<10;X++)
for(Y=0;Y<500;Y++);
}
/***** *****/
void INIT_I2C()
{
SDA=1;
SCL=1;
}
void START()
{
SDA=1;
DELAY();
SCL=1;
DELAY();
SDA=0;
DELAY();
SCL=0;
}
void STOP()
{
SCL=1;
DELAY();
SDA=0;
//DELAY();
SDA=1;
DELAY();
SCL=0;
}
void SEND_DATA(int x)
{
int Z,i,k;
Z=x;
k=x;
for(i=0;i<8;i++)
{
Z&=(0x80);
if(Z==0x80)
{
SDA=1;
SCL=1;
DELAY();
SCL=0;
}
else
{
SDA=0;
SCL=1;
DELAY();
SCL=0;
}
k<<=1;
Z=k;
}
while(SDA==1);
SCL=1;
DELAY();
SCL=0;
SDA=0;
}
void SEND_DATA1(int x)
{
int Z,i,k;
Z=x;
k=x;
for(i=0;i<8;i++)
{
Z&=(0x80);
if(Z==0x80)
{
SDA=1;
SCL=1;
DELAY();
SCL=0;
}
else
{
SDA=0;
SCL=1;
DELAY();
SCL=0;
}
k<<=1;
Z=k;
}
}
void GET_DATA()
{
unsigned char i,Data=0X00;
for(i=0;i<=8;i++)
{
// SCL = 0;
SCL = 1;
DELAY();
Data|=SDA;
Data<<=1;
SCL=0;
// SCL=1;
}
// SCL = 0;
SDA = 1;
SCL=1;
DELAY();
SCL=0;
P2=Data;
SDA=0;
}
/*
void ACK()
{
while(SDA==1);
SCL=1;
DELAY();
SCL=0;
}
void NAK()
{
SCL=1;
DELAY();
SDA=1;
DELAY();
SCL=1;
DELAY();
SCL=0;
}
void MACK()
{
SDA=0;
SCL=1;
DELAY();
SCL=0;
}
*/