51单片机控制EEPROM哪位大神帮忙看i2c通信错在哪里了

[复制链接]
查看11 | 回复8 | 2021-1-27 07:17:19 | 显示全部楼层 |阅读模式
#include
#defineucharunsignedchar
sbitscl=P3^0;
sbitsda=P3^1;
voiddelay();
voiddelayl(uchartimes);
voidstart();
voidstop();
voidtack();
voidnack();
voidack();
voidwrite(uchardate);
ucharread();
voidwriteadd(ucharaddress,uchardate);
ucharreadadd(ucharaddress);
voiddelay()
{
;
;
}
voiddelayl(uchartimes)
{
ucharx,y;
for(x=times;x>0;x--)
for(y=110;y>0;y--);
}
voidstart()
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
scl=0;
delay();
}
voidstop()
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
scl=0;
delay();
}
voidtack()
{

scl=1;
delay();
scl=0;
delay();

}
voidnack()
{
sda=1;
delay();
scl=1;
delay();
scl=0;
delay();
}
voidack()
{
sda=0;
delay();
scl=1;
delay();
scl=0;
delay();
}
voidwrite(uchardate)
{
uchari,temp;
temp=date;
for(i=0;i -->
回复

使用道具 举报

千问 | 2021-1-27 07:17:19 | 显示全部楼层
怎么没人回啊
回复

使用道具 举报

千问 | 2021-1-27 07:17:19 | 显示全部楼层
大神们看下嘛
回复

使用道具 举报

千问 | 2021-1-27 07:17:19 | 显示全部楼层
路过,看看,我什么都不懂!
回复

使用道具 举报

千问 | 2021-1-27 07:17:19 | 显示全部楼层
很长,
1.加2个上拉电阻看看
2.tack()如果没有ACK则要及时返回,不要继续读写了
3.你要看看你的EEPROM到底是不是8位地址的即容量有没有超过256字节
4.确定器件地址是0xae.这个地方就不对,读写不会都是0XAE的
回复

使用道具 举报

千问 | 2021-1-27 07:17:19 | 显示全部楼层
示波器看,从Start开始到Stop结束,要跟E2的资料上的波形完全一样就行了。光看代码看不出啥问题的。还要注意SDA脚的方向新,在ACK位的时候要配成输入脚。
回复

使用道具 举报

千问 | 2021-1-27 07:17:19 | 显示全部楼层
示波器看,从Start开始到Stop结束,要跟E2的资料上的波形完全一样就行了。光看代码看不出啥问题的。还要注意SDA脚的方向新,在ACK位的时候要配成输入脚。
回复

使用道具 举报

千问 | 2021-1-27 07:17:19 | 显示全部楼层
你这个delay()没有时延,IIC一般最快才400K,单片机至少也是8M以上吧,你在delay()里加两个for循环试一下
回复

使用道具 举报

千问 | 2021-1-27 07:17:19 | 显示全部楼层
贴上示波器图让大家给你看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行