#define uint unsigned int
#define uchar unsigned char
uchar f;
sbit sda=P3^4;
sbit scl=P3^3;
void delayus()//五微秒
{;;}
void delayms(uint z)//壹毫秒
{
uint x,y;
for(y=z;y>0;y--)
for(x=110;x>0;x--);
}
void init()//初始化
{
scl=1;
delayus();
sda=1;
delayus();
}
void start()//開始信號
{
sda=1;
delayus();
scl=1;
delayus();
sda=0;
delayus();
scl=0;
delayus();
}
void stop()//停止信號
{
sda=0;
delayus();
scl=1;
delayus();
sda=1;
delayus();
}
/*void response()//應答信號
{
delayus();
scl=1;
delayus();
}*/
void write_byte(uchar dat)//寫壹個字節
{ bit ack_bit;
uchar b,c;
scl=0;
delayus();
sda=1;
for(b=0;b<8;b++)
{
//c=dat&(0x80<<1);
c = (bit)(dat&0x80);
delayus();
sda=c;
delayus();
scl=1;
delayus();
scl=0;
delayus();
dat<<=1;
delayus();
}
/*下面是response();*/
sda=1;// scl=0;
delayus();
scl=1; //sda=1;
delayus();
ack_bit = sda; //接受設備(AT24Cxx)向SDA送低電平,表示已經接收到壹個字節 ,若送高電平,表示沒有接收到,傳送異常
scl = 0; //SCL為低電平時,SDA上數據才允許變化(即允許以後的數據傳遞)
}
uchar read_byte()//讀壹個字節
{
uchar d,e;
/* scl=0;//數據可以變化
delayus();
sda=1;
delayus();*/
for(d=0;d<8;d++)
{
scl=1;//數據穩定的時候可以進行對數據的操作,但是不可以改變數據狀態
e<<=1;
//e=sda|(0x01<<d);
e|=(unsigned char)sda;
delayus();
scl=0;//來個脈沖把數據發送出去(低電平時數據可變)
}
return e;
}
void write_24c02(uchar address,uchar dat)
{
start();
write_byte(0xa0);
//response();
write_byte(address);
// response();
write_byte(dat);
// response();
stop();
}
uchar read_24c02(uchar address)
{
start();
write_byte(0xa0);
// response();
write_byte(address);
// response();
start();
write_byte(0xa1);
// response();
f=read_byte();
stop();
return f;
}
void main()
{
delayus();
write_24c02(3,0x02);
delayms(10);
P1=read_24c02(3);
while(1);
}