![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
AT24c02,没有写保护,只能读不能写,不知错在哪里,我人生无趣呀,望Who来解救我这位迷茫之徒吧 5
用正确的读写程序已往24C02地址00里依次写入0~9,再用自己写的程序可读出00~09地址里的数,但是却不能往里写入数据,比如我往03地址写入7,读出还是之前的3,而不...
用正确的读写程序已往24C02地址00里依次写入0~9,再用自己写的程序可读出00~09地址里的数,但是却不能往
里写入数据,比如我往03地址写入7,读出还是之前的3,而不是7,WP已接地,未写保护.苦思了许久,无奈只能
求教各位大侠,为什么出现只读不能写的现象,不知错在哪里,我人生无趣呀,望Who来解救我这位迷茫之徒吧
……
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit scl=P1^0;
sbit sda=P1^1;
uchar code table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f,0x67};
void delayus()//
{
{;;}
}
void delayms(uint x)//
{
uchar m,n;
for(m=x;x>0;x--)
for(n=110;n>0;n--);
}
void init()//两总线释放总线(都为高电平),为总线空闲状态,此时才
{ //准许启动数据传送
sda=1;
delayus();
scl=1;
delayus();
}
void sta()//起始信号
{
sda=1;scl=1;delayus();
sda=0;delayus();
scl=0;
}
bit resp()//应答信号
{
uchar i=0;bit ask;
scl=0;
sda=1;
ask=sda;
scl=1;delayus();
scl=0;
sda=1;
}
void sto()//终止信号
{
scl=1;
sda=0;delayus();
sda=1;delayus();
sda=0;
}
void writebyte(uchar dat)//写一字节
{
uchar i,temp;
temp=dat;
for(i=8;i>0;i--)
{
scl=0;
temp=temp<<1;
sda=CY;
scl=1;
}
scl=0;delayus();
sda=1;delayus();
}
uchar readbyte()//读一字节
{
uchar i,dat=0;
scl=0;
sda=1;
for(i=8;i>0;i--)
{
scl=1;
dat=(dat<<1)|sda;
scl=0;delayus();//延时一定一定要加,不然读数错误
}
return(dat);
}
void write24c02(uchar address,uchar shu)//往地址里写数据
{
sta();
writebyte(0xA0);resp();
writebyte(address);resp();
writebyte(shu);resp();
sto();
}
uchar read24c02(uchar address)//读地址数据
{
uchar d;
sta();
writebyte(0xA0);resp();
writebyte(address);resp();
sta();
writebyte(0xa1);resp();
d=readbyte();
sto();
return(d);
}
void main()
{
uchar d;
init();
write24c02(3,7);delayms(30);
d=read24c02(3);
while(1)
{
P2=7;
P0=table[d];
}
} 展开
里写入数据,比如我往03地址写入7,读出还是之前的3,而不是7,WP已接地,未写保护.苦思了许久,无奈只能
求教各位大侠,为什么出现只读不能写的现象,不知错在哪里,我人生无趣呀,望Who来解救我这位迷茫之徒吧
……
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit scl=P1^0;
sbit sda=P1^1;
uchar code table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f,0x67};
void delayus()//
{
{;;}
}
void delayms(uint x)//
{
uchar m,n;
for(m=x;x>0;x--)
for(n=110;n>0;n--);
}
void init()//两总线释放总线(都为高电平),为总线空闲状态,此时才
{ //准许启动数据传送
sda=1;
delayus();
scl=1;
delayus();
}
void sta()//起始信号
{
sda=1;scl=1;delayus();
sda=0;delayus();
scl=0;
}
bit resp()//应答信号
{
uchar i=0;bit ask;
scl=0;
sda=1;
ask=sda;
scl=1;delayus();
scl=0;
sda=1;
}
void sto()//终止信号
{
scl=1;
sda=0;delayus();
sda=1;delayus();
sda=0;
}
void writebyte(uchar dat)//写一字节
{
uchar i,temp;
temp=dat;
for(i=8;i>0;i--)
{
scl=0;
temp=temp<<1;
sda=CY;
scl=1;
}
scl=0;delayus();
sda=1;delayus();
}
uchar readbyte()//读一字节
{
uchar i,dat=0;
scl=0;
sda=1;
for(i=8;i>0;i--)
{
scl=1;
dat=(dat<<1)|sda;
scl=0;delayus();//延时一定一定要加,不然读数错误
}
return(dat);
}
void write24c02(uchar address,uchar shu)//往地址里写数据
{
sta();
writebyte(0xA0);resp();
writebyte(address);resp();
writebyte(shu);resp();
sto();
}
uchar read24c02(uchar address)//读地址数据
{
uchar d;
sta();
writebyte(0xA0);resp();
writebyte(address);resp();
sta();
writebyte(0xa1);resp();
d=readbyte();
sto();
return(d);
}
void main()
{
uchar d;
init();
write24c02(3,7);delayms(30);
d=read24c02(3);
while(1)
{
P2=7;
P0=table[d];
}
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询