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

[复制链接]
3075|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

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