标题: 关于24c02程序问题,一个读写过后多长时间才再次写入 [打印本页]

作者: z164361414    时间: 2021-6-29 12:05
标题: 关于24c02程序问题,一个读写过后多长时间才再次写入
就是一个读写过后多长时间才再次写入.               
                Eeprom_Write(0x72,20);
                delayms(1);
                abc=Eeprom_Read(0x72);
                sprintf(str,"%02d",(int)abc);
                LCD_PutString2(240-24,50,str,RED,WHITE);
                delayms(100);
               
                Eeprom_Write(0x73,21);
                delayms(1);
                abc=Eeprom_Read(0x73);
                sprintf(str,"%02d",(int)abc);
                LCD_PutString2(240-24*4,50,str,RED,WHITE);

这是代码 第一个可以正常的读写 读完以后总线也给空闲了 但是第二个就写不进去 读出来的是255.请问这是为什么啊

作者: yzwzfyz    时间: 2021-6-29 14:13
学会查手册,这是基本常识。
作者: z164361414    时间: 2021-6-29 14:18
yzwzfyz 发表于 2021-6-29 14:13
学会查手册,这是基本常识。

手册上两次间隔几毫秒就都了,但是试了从小到大一直到100ms都不行
作者: 1973470203    时间: 2021-6-29 15:15
你要不试试把写入之后的延时增加看看能不能行
作者:     时间: 2021-6-29 16:51
你这个只执行一次还是执行多次,如果是多次上一次最后一次读完到下一次写入时间间隔会很小
作者: sadv    时间: 2021-6-29 19:00
读出来的是255,转换为16进制其实是0xFF,说明SDA线根本就没变化,建议逻辑分析仪抓一下读写时的波形,观察规律,是否总是在第一次读写后发生异常,如果是那就可能是第一次读写后没有把SDA线复位的原因
作者: wangzhen667    时间: 2021-6-29 21:12
加大一下延迟?要不就写成一个函数处理?
作者: z164361414    时间: 2021-6-30 08:35
sadv 发表于 2021-6-29 19:00
读出来的是255,转换为16进制其实是0xFF,说明SDA线根本就没变化,建议逻辑分析仪抓一下读写时的波形,观察 ...

进行在下次开始的写的时候就和scl一起拉高给总线空闲了
作者: z164361414    时间: 2021-6-30 08:35
wangzhen667 发表于 2021-6-29 21:12
加大一下延迟?要不就写成一个函数处理?

都有试过 还是不行
作者: shumivan    时间: 2021-6-30 08:48
这应该不是24C02的间隔问题,应该是你底层驱动程序的时序造成的吧,你先从底层时序开始查找,上边的包装函数一般不会出问题。如果实在找不到,那就用原子哥的例程改一下试试。当然,你的芯片寻址地址是最先检查的,其次就是写入地址的范围,然后是时序(包括启用的IO模式,速率等),在最后才是你的外层封装函数。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1