4199|3

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

谁能给我个用STM8L来读取外部24C02的函数 [复制链接]

                                 真是郁闷,昨天弄了一天了,还是没成功。具体是这样的。我用的硬件I2C口PC0,PC1,外部上拉电阻。这样我可以用硬件I2C,也可以用模拟I2C,结果,不管是硬件I2C,还是软件I2C,先写数据,再把数据读出来。写的时候可以顺利进行,读的时候,却在发送器件地址等待ack的时候,卡住了,怎么都通不过,也就是没得到ack。谁能给我个拥有的读函数啊!
此帖出自stm32/stm8论坛

最新回复

                                 自己解决了!!!外部24c02的写操作和读操作时间是不一样的;写操作进行完后要延时一段时间,我加了250us的延时后就正常了。读操作就不需要这么多延时。 ... 正常现象。E2prom如24Cxx 在收到写数据的指令后,会执行写数据的操作,有相当一段时间不会相应I2C命令。  详情 回复 发表于 2010-8-17 14:33
点赞 关注
 

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
发现原因了,我单次读操作可以成功,单次写操作也可以成功,读了之后再写也能行。但是写了之后再读就不行。
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;
}
此帖出自stm32/stm8论坛
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 自己解决了!!!外部24c02的写操作和读操作时间是不一样的;写操作进行完后要延时一段时间,我加了250us的延时后就正常了。读操作就不需要这么多延时。
此帖出自stm32/stm8论坛
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
自己解决了!!!外部24c02的写操作和读操作时间是不一样的;写操作进行完后要延时一段时间,我加了250us的延时后就正常了。读操作就不需要这么多延时。 ...
正常现象。E2prom如24Cxx 在收到写数据的指令后,会执行写数据的操作,有相当一段时间不会相应I2C命令。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表