EEPROM的IIC程序问题。无错误、无警告,就是烧到52中不能实现。求解。。。。 5
#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitscl=P2^1;sbitsda=P...
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit scl=P2^1;
sbit sda=P2^0;
void delay5us()
{;;}
void start()
{
sda=1;delay5us();
scl=1;delay5us();
sda=0;delay5us();
}
void stop()
{
sda=0;delay5us();
scl=1;delay5us();
sda=1;delay5us();
}
void respond()
{
uchar i;
scl=1;delay5us();
while((sda==1)&&(i++<250));
scl=0;delay5us();
}
void wr_b(uchar date)
{
uchar i;
for(i=0;i<8;i++)
{
date<<=1;
sda=CY;delay5us();
scl=1;delay5us();
scl=0;delay5us();
}
}
uchar re_b()
{
uchar i,date;
for(i=0;i<8;i++)
{
scl=1;delay5us();
date=(date<<1)|sda;
scl=0;delay5us();
}
return date;
}
void wr_dat(uchar address,uchar date )
{
start();
wr_b(0xa0);
respond();
wr_b(address);
respond();
wr_b(date);
respond();
stop();
}
uchar re_dat(uchar address)
{
uchar date;
start();
wr_b(0xa0);//
respond();
wr_b(address);
respond();
start();
wr_b(0xa1);
respond();
date=re_b();
respond();
stop();
return date;
}
void dalay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void inti()
{
sda=1;delay5us();
scl=1;delay5us();
}
void main()
{
inti();
wr_dat(23,0xaa);
dalay(200);
P1=re_dat(23);
while(1);
} 展开
#define uchar unsigned char
#define uint unsigned int
sbit scl=P2^1;
sbit sda=P2^0;
void delay5us()
{;;}
void start()
{
sda=1;delay5us();
scl=1;delay5us();
sda=0;delay5us();
}
void stop()
{
sda=0;delay5us();
scl=1;delay5us();
sda=1;delay5us();
}
void respond()
{
uchar i;
scl=1;delay5us();
while((sda==1)&&(i++<250));
scl=0;delay5us();
}
void wr_b(uchar date)
{
uchar i;
for(i=0;i<8;i++)
{
date<<=1;
sda=CY;delay5us();
scl=1;delay5us();
scl=0;delay5us();
}
}
uchar re_b()
{
uchar i,date;
for(i=0;i<8;i++)
{
scl=1;delay5us();
date=(date<<1)|sda;
scl=0;delay5us();
}
return date;
}
void wr_dat(uchar address,uchar date )
{
start();
wr_b(0xa0);
respond();
wr_b(address);
respond();
wr_b(date);
respond();
stop();
}
uchar re_dat(uchar address)
{
uchar date;
start();
wr_b(0xa0);//
respond();
wr_b(address);
respond();
start();
wr_b(0xa1);
respond();
date=re_b();
respond();
stop();
return date;
}
void dalay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void inti()
{
sda=1;delay5us();
scl=1;delay5us();
}
void main()
{
inti();
wr_dat(23,0xaa);
dalay(200);
P1=re_dat(23);
while(1);
} 展开
2个回答
展开全部
用示波器看,把波形发来,我帮你分析,首先得确定是MCU的问题还是IIC从设备硬件电路的问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询