#include <head.h>
uchar i2c_read_byte(uchar byte_add)
{
uchar i,a,u,v;
v=0;
scl=1;
sda=1;
delay(10);
sda=0;//start i2c;
delay(15);
for(i=0;i<8;i++)//transmit the dev write add
{
scl=0;
delay(5);
sda=((0xa0>>(7-i)) & 0x01);
delay(5);
scl=1;
delay(15);
}
scl=0;//wait the ACK
sda=1;
a=20;
while(sda&&a)//
{a--;}
if(a==0)
{
scl=1;
return 0x55;
}
delay(10);
scl=1;
delay(15);
scl=0;
delay(20);
for(i=0;i<8;i++)//transmit the byte add
{
scl=0;
delay(5);
sda=((byte_add>>(7-i)) & 0x01);
delay(5);
scl=1;
delay(15);
}
scl=0;//wait the ACK
sda=1;
a=20;
while(sda&&a)//
{a--;}
if(a==0)
{
scl=1;
return 0x55;
}
delay(10);
scl=1;
delay(15);
scl=0;
delay(20);
scl=1;
sda=1;
delay(30);
sda=0;//start i2c;
delay(15);
for(i=0;i<8;i++)//transmit the dev read add
{
scl=0;
delay(5);
sda=((0xa1>>(7-i)) & 0x01);
delay(10);
scl=1;
delay(15);
}
scl=0;//wait the ACK
sda=1;
a=20;
while(sda&&a)//
{a--;}
if(a==0)
{
scl=1;
return 0x55;
}
delay(10);
scl=1;
delay(15);
scl=0;
delay(20);
sda=1;//read the byte
delay(10);
for(i=0;i<8;i++)
{
scl=0;
delay(10);/////maybe require to adjust the interval to let the dev clock out data
u=sda;
v+=u<<(7-i);
delay(5);
scl=1;
delay(15);
}
scl=0;
delay(10);
sda=0;
delay(20);
scl=1;//stop i2c
delay(5);
sda=1;
return v;
}
uchar i2c_write_byte(uchar byte_add,uchar byte_data)
{
uchar i,a;
scl=1;
sda=1;
delay(10);
sda=0;//start i2c;
delay(15);
for(i=0;i<8;i++)//transmit the dev write add
{
scl=0;
delay(5);
sda=((0xa0>>(7-i)) & 0x01);
delay(5);
scl=1;
delay(15);
}
scl=0;//wait the ACK
sda=1;
a=20;
while(sda&&a)//
{a--;}
if(a==0)
{
scl=1;
return 0x55;
}
delay(10);
scl=1;
delay(15);
scl=0;
delay(20);
for(i=0;i<8;i++)//transmit the byte add
{
scl=0;
delay(5);
sda=((byte_add>>(7-i)) & 0x01);
delay(5);
scl=1;
delay(15);
}
scl=0;//wait the ACK
sda=1;
a=20;
while(sda&&a)//
{a--;}
if(a==0)
{
scl=1;
return 0x55;
}
delay(10);
scl=1;
delay(15);
scl=0;
delay(20);
for(i=0;i<8;i++)//transmit the byte_data
{
scl=0;
delay(5);
sda=((byte_data>>(7-i)) & 0x01);
delay(10);
scl=1;
delay(15);
}
scl=0;//wait the ACK
sda=1;
a=20;
while(sda&&a)//
{a--;}
if(a==0)
{
scl=1;
return 0x55;
}
delay(10);
scl=1;
delay(15);
scl=0;
delay(20);
delay(15);//stop the bus
sda=0;
delay(10);
scl=1;
delay(10);
sda=1;
delay(20);
return 1;
}