我參考的是這個程序
但是讀寫只能成功3個數據
只要讀寫超過3個數據就會有一個隨機數據保存失敗
#include<reg51.h>
#define uchar unsigned char
sbit sda3=P3^1;
sbit scl3=P3^0;
void delay()
{ ;;;}
void start3()
{ sda3=1;
delay();
scl3=1;
delay();
sda3=0;
delay();
}
void stop3()
{ sda3=0;
delay();
scl3=1;
delay();
sda3=1;
delay();
}
void response3()
{ uchar i;
scl3=1;
delay();
if((sda3==1)&&i<250) i++;
scl3=0;
delay();
}
void noack3()
{ scl3=1;
delay();
scl3=1;
delay();
scl3=0;
delay();
sda3=0;
delay();
}
void init4()
{ sda3=1;
delay();
scl3=1;
delay();
}
void write_byte3(uchar date)
{ uchar i,temp1;
temp1=date;
for(i=0;i<8;i++)
{ temp1=temp1<<1;
scl3=0;
delay();
sda3=CY;
delay();
scl3=1;
delay();
scl3=0;
delay();
}
scl3=0;
delay();
sda3=1;
delay();
}
uchar read_byte3()
{ uchar i,k;
scl3=0;
delay();
sda3=1;
delay();
for(i=0;i<8;i++)
{ scl3=1;
delay();
k=(k<<1)|sda3;
scl3=0;
delay();
}
return k;
}
void delay3(uchar x)
{ uchar a,b;
for(a=x;a>0;a--)
for(b=200;b>0;b--);
}
void write_add3(uchar address,uchar date)
{ start3();
write_byte3(0xa0); //é豸μØÖ·
response3();
write_byte3(address);
response3();
write_byte3(date);
response3();
stop3();
}
uchar read_add3(uchar address)
{ uchar date;
start3();
write_byte3(0xa0);
response3();
write_byte3(address);
response3();
start3();
write_byte3(0xa1);
response3();
date=read_byte3();
noack3();
stop3();
return date;
}
void main()
{ uchar kk;
init4();
kk=0;
write_add3(kk,0x55);
delay3(100);
P1=read_add3(kk);
while(1);
}
|