AT24c02无写保护,但只能正确读出不能正确写入
读任意地址数据功能正常,但写入数据不稳定,就成功写入一次,这是怎么回事?请教高手呀?再次谢谢了#include<reg52.h>#defineuintunsignedin...
读任意地址数据功能正常,但写入数据不稳定,就成功写入一次,这是怎么回事?请教高手呀?再次谢谢了
#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;
sda=1;//delayus();
scl=1;delayus();
ask=sda;
scl=0;
return(ask);
}
void nonresp()
{
sda=1;scl=0;
scl=1;delayus();
}
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--)
{
temp=temp<<1;
scl=0;//delayus();
sda=CY;
scl=1;//delayus();
}
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]; }
} 展开
#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;
sda=1;//delayus();
scl=1;delayus();
ask=sda;
scl=0;
return(ask);
}
void nonresp()
{
sda=1;scl=0;
scl=1;delayus();
}
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--)
{
temp=temp<<1;
scl=0;//delayus();
sda=CY;
scl=1;//delayus();
}
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个回答
2011-04-20
展开全部
时触发中断,此时把数据写到存储器里。
滤波电容里的那点电就足以使cpu执行这点指令了,不行就加大点容量。
另外,站长团上有产品团购,便宜有保证
滤波电容里的那点电就足以使cpu执行这点指令了,不行就加大点容量。
另外,站长团上有产品团购,便宜有保证
ZESTRON
2024-09-04 广告
2024-09-04 广告
电子失效分析是指对电子元件或系统进行系统调查,以确定失效原因。通过显微镜、光谱学和电气测试等技术,分析人员可以查明导致故障的缺陷或问题。此过程包括检查物理损坏、分析电气特性和进行环境测试以确定根本原因。电子故障分析在半导体制造、汽车电子和消...
点击进入详情页
本回答由ZESTRON提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |