打印
[STM8]

谁能给我个用STM8L来读取外部24C02的函数

[复制链接]
2503|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
honami520|  楼主 | 2010-8-17 08:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
真是郁闷,昨天弄了一天了,还是没成功。具体是这样的。我用的硬件I2C口PC0,PC1,外部上拉电阻。这样我可以用硬件I2C,也可以用模拟I2C,结果,不管是硬件I2C,还是软件I2C,先写数据,再把数据读出来。写的时候可以顺利进行,读的时候,却在发送器件地址等待ack的时候,卡住了,怎么都通不过,也就是没得到ack。谁能给我个拥有的读函数啊!
沙发
honami520|  楼主 | 2010-8-17 08:59 | 只看该作者
发现原因了,我单次读操作可以成功,单次写操作也可以成功,读了之后再写也能行。但是写了之后再读就不行。
void WRITE_24C02_BYTE(u8 device,u8 addr,u8 dat)
{
    I2C_START();
    I2C_WRITE_BYTE(device);
    while(I2C_CACK());
    I2C_WRITE_BYTE(addr);
    while(I2C_CACK());
    I2C_WRITE_BYTE(dat);
    while(I2C_CACK());
    I2C_STOP();
}

u8 READ_24C02_BYTE(u8 device,u8 addr)
{
    u8 temp;
   
    I2C_START();
    I2C_WRITE_BYTE(device);
    while(I2C_CACK());  
    I2C_WRITE_BYTE(addr);
    while(I2C_CACK());
    I2C_START();
    I2C_WRITE_BYTE(device + 0x01);
    while(I2C_CACK());
    temp = I2C_READ_BYTE();
    I2C_MNACK();
    I2C_STOP();
    return temp;
}

使用特权

评论回复
板凳
honami520|  楼主 | 2010-8-17 09:39 | 只看该作者
自己解决了!!!外部24c02的写操作和读操作时间是不一样的;写操作进行完后要延时一段时间,我加了250us的延时后就正常了。读操作就不需要这么多延时。

使用特权

评论回复
地板
IJK| | 2010-8-17 14:33 | 只看该作者
自己解决了!!!外部24c02的写操作和读操作时间是不一样的;写操作进行完后要延时一段时间,我加了250us的延时后就正常了。读操作就不需要这么多延时。 ...
honami520 发表于 2010-8-17 09:39


正常现象。E2prom如24Cxx 在收到写数据的指令后,会执行写数据的操作,有相当一段时间不会相应I2C命令。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

189

帖子

2

粉丝