|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这两天在学习AT24C02, 晶振11.0592MHz 写了一段代码, 首先向24C02 0-15地址写入0-15, 再读取出来显示在1602上, 结果发现, 奇数位是正确的, 偶数位错误.经排查发现时写入错误, 即本应写入0123456789abcdef, 实际写入0520456084ace, 困扰我很久. 今天早上突发奇想, 是不是写的太快了, 加延时试试看.问题解决....8 E. E ^6 u7 r
总结:% A* {! O( W0 v+ ~' y! U# e1 R
24C02在逐位写入数据时, 必须加延时, 否则器件处理不过来导致偶数位写入失败. 手头的这颗料, 需要加1毫秒延时才能保证写入正确.
3 S. R9 o1 N# y, `+ Y: C读取时, 不加延时也能正确读取到,(可能器件的读取速度快), 保险起见, 建议加上延时.
0 g9 `5 _% N! q, ~7 |/ ^- @, i1 l! g+ f
' a" X7 X( i$ b3 |) D D! e+ t6 _8 A% p0 _3 q9 E. w: g- f
for(i=0; i<16; i++)
. u/ p9 E% {' V6 @0 }4 t& F {) J$ P* W& P' v) U6 {' q
at2402_write(i,i);7 w0 O' C# Y" x0 n8 c. F5 r
delayms(1);: ]" U% X6 }2 V" d6 e3 w: d2 c, T. Q
}* q, H+ m& P/ @9 k( K
1 j! k z# U! n" ~. A. Y1 I- ?! z4 C
for(i=0; i<16; i++)
6 s3 o& z7 {' H {5 g2 y, q) y1 N" ]1 Q7 J8 u
lcdwritechar(2,i,num2str(at2402_read(i)));$ ]0 X; F4 x- y
}
9 c% ] _$ q+ @" y
, [" o+ P! O; p" @. ]. S, Z3 v9 k
' @+ ^ J6 _' |( j# g |
|