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];
}
}
展开
 我来答
美梦轻扬
2011-04-20 · TA获得超过599个赞
知道小有建树答主
回答量:433
采纳率:0%
帮助的人:0
展开全部
总线上拉没,我这有个64A的好用,要不给你发过去?
追问
好的,我的邮箱:jiquanz@163.com谢谢呀
追答
整个一个系统的,直接调用相应函数即可
64A测试过
好使
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式