sbit IIC_scl=P1^5;
sbit IIC_sda=P3^6;
void Delaynus(uint us)
{
while(--us);
}
void Delaynms(uint ms)
{
uint a,b;
for(a=0;a<ms;a++)
for(b=0;b<109;b++);
}
void IIC_Start()
{
IIC_sda=1;
Delaynus(2);
IIC_scl=1;
Delaynus(2);
IIC_sda=0;
Delaynus(2);
}
void IIC_Stop()
{
IIC_sda=0;
Delaynus(2);
IIC_scl=1;
Delaynus(2);
IIC_sda=1;
Delaynus(2);
}
void IIC_Send_Byte(uchar byte)
{
uchar temp=byte;
uchar i;
IIC_sda=1;
Delaynus(2);
IIC_scl=0;
Delaynus(2);
for(i=0;i<8;i++)
{
IIC_scl=0;
Delaynus(2);
IIC_sda=(bit)(temp&0x80);
Delaynus(2);
IIC_scl=1;
Delaynus(2);
temp<<=1;
}
IIC_scl=0;
Delaynus(2);
IIC_sda=1;
Delaynus(2);
}
uchar IIC_Receive_Byte()
{
uchar temp,i,byte=0;
IIC_sda=1;
Delaynus(2);
IIC_scl=0;
Delaynus(2);
for(i=0;i<8;i++)
{
IIC_scl=1;
Delaynus(2);
if(IIC_sda==1)
{
temp=1;
}
else
{
temp=0;
}
byte=(byte<<1)|temp;
IIC_scl=0;
}
Delaynus(2);
return(byte);
}
void IIC_Ack()
{
uchar counter=5;
IIC_scl=1;
Delaynus(2);
while((IIC_sda==1)&&counter++);
IIC_scl=0;
Delaynus(2);
}