[51单片机] AT24C02写入多个数据

[复制链接]
6257|14
 楼主| Bellon 发表于 2015-1-4 09:03 | 显示全部楼层 |阅读模式
通过IIC总线向AT24C02写入了一个数据,也可以顺利的读取出来,但是想连续写入两个字节的数据并读取出来的时候就不行了,读出来的数据不正确,这是为啥呢?
ningling_21 发表于 2015-1-4 09:19 | 显示全部楼层
芯片资料需多看,写多个数据时,有多少数据? 又没超过一个页的数量?超过需加延时再写下一个页的数据
ayb_ice 发表于 2015-1-4 09:25 | 显示全部楼层
写注意跨页,

注意应答与非应答信号
 楼主| Bellon 发表于 2015-1-4 11:31 | 显示全部楼层
ningling_21 发表于 2015-1-4 09:19
芯片资料需多看,写多个数据时,有多少数据? 又没超过一个页的数量?超过需加延时再写下一个页的数据 ...

没有跨页呢,芯片资料看了呀,我就写两个字节的数据,不牵扯到跨页的问题,一个字节的读和写都没问题的呢,代码如下:
void write_add_2byte(uchar add,uint dat)
{
        uchar datH,datL;
        datH=(uchar)(dat>>8);
        datL=(uchar)(dat&0x00ff);
        start();
        write_byte(0xa0);//
        response();
        write_byte(add);//
        response();
        write_byte(datH);//
        response();
        write_byte(datL);//
        response();
        stop();
}
uint read_add_2byte(uchar add)
{
        uint dat;
        uchar datH,datL;
        start();
        write_byte(0xa0);//
        response();
        write_byte(add);//
        response();
        start();
        write_byte(0xa1);//
        response();
        datH=read_byte();
        response();
        datL=read_byte();
        stop();
        dat=datH*256+datL;
        return dat;       
}
 楼主| Bellon 发表于 2015-1-4 11:32 | 显示全部楼层
ayb_ice 发表于 2015-1-4 09:25
写注意跨页,

注意应答与非应答信号

应答和非应答信号要如何写呢?
ningling_21 发表于 2015-1-4 12:08 | 显示全部楼层
Bellon 发表于 2015-1-4 11:31
没有跨页呢,芯片资料看了呀,我就写两个字节的数据,不牵扯到跨页的问题,一个字节的读和写都没问题的呢 ...

对应答的处理有点问题
ayb_ice 发表于 2015-1-4 13:33 | 显示全部楼层
本帖最后由 ayb_ice 于 2015-1-4 14:23 编辑
Bellon 发表于 2015-1-4 11:32
应答和非应答信号要如何写呢?

看手册吧

每个字节都要响应,但接收与发送的响应是有区别的,

接收是自己响应别人,发送是接收别人的响应

连续读操作最后一个字节是发送非应答信号,对方收到非应答信号信号会释放SDA线,否则可能会导致SDA被锁在低电平,导致后面的操作失效

评分

参与人数 1威望 +1 收起 理由
Bellon + 1 谢谢!

查看全部评分

arisexue 发表于 2015-1-4 15:33 来自手机 | 显示全部楼层
首先把时序写对,每次读完或写完作延时一下。
 楼主| Bellon 发表于 2015-1-4 16:21 | 显示全部楼层
ningling_21 发表于 2015-1-4 12:08
对应答的处理有点问题

什么问题呢,请指出?
ayb_ice 发表于 2015-1-4 16:35 | 显示全部楼层
Bellon 发表于 2015-1-4 16:21
什么问题呢,请指出?

读写应答是不一样的东西,一个是你应答别人,一个是别人应答你
 楼主| Bellon 发表于 2015-1-4 17:19 | 显示全部楼层
ayb_ice 发表于 2015-1-4 16:35
读写应答是不一样的东西,一个是你应答别人,一个是别人应答你

多谢指导,果真是应答信号的问题,添加了MCU的应答信号和非应答信号,调试成功!!!:victory:
雪夜虫子 发表于 2015-1-4 17:43 | 显示全部楼层
本帖最后由 雪夜虫子 于 2015-7-23 08:58 编辑

...试试。
受不了了 发表于 2015-1-4 21:26 | 显示全部楼层
没人带是痛苦的,这么基础的一个问题让楼主折腾半天
yixiao22 发表于 2015-1-5 08:14 | 显示全部楼层
时序是不是要调整下。
cddxcdx 发表于 2015-1-5 08:32 | 显示全部楼层
每次操作之间需要延时,具体也忘记了,应该是ms级的,写个延时程序调试看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

8

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部