|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这两天在学习AT24C02, 晶振11.0592MHz 写了一段代码, 首先向24C02 0-15地址写入0-15, 再读取出来显示在1602上, 结果发现, 奇数位是正确的, 偶数位错误.经排查发现时写入错误, 即本应写入0123456789abcdef, 实际写入0520456084ace, 困扰我很久. 今天早上突发奇想, 是不是写的太快了, 加延时试试看.问题解决.... z" i; N3 @- x/ K5 b: H2 {
总结:! I) y' `! ~! G3 B) v6 n; V0 [# f3 R
24C02在逐位写入数据时, 必须加延时, 否则器件处理不过来导致偶数位写入失败. 手头的这颗料, 需要加1毫秒延时才能保证写入正确.
! t, o" Y! ]7 P6 D) [读取时, 不加延时也能正确读取到,(可能器件的读取速度快), 保险起见, 建议加上延时.
3 p. U+ p0 ~0 r1 `: @# W' X( \: C5 g7 ~, q
; U, A! B- F$ S( ^* z for(i=0; i<16; i++). z& u' `9 L5 L/ c
{
7 E8 L6 _' Z/ i7 K0 d9 z! O at2402_write(i,i);+ Q$ b9 c' O& t% G; d$ |# C# \/ D) d3 U
delayms(1);
) `# I6 ]' R; k4 d Y( A }& r4 N+ W3 l3 U5 n
$ @. M l9 G* e
for(i=0; i<16; i++)
! P0 W2 P. t7 j' n( `9 L9 |5 | {, f4 h4 p1 g1 J' r
lcdwritechar(2,i,num2str(at2402_read(i)));
- ?% n. l) q8 v }1 R$ C1 J- W7 U
+ ^+ i0 x0 E8 @$ I
$ D2 B Q8 T9 F+ G' o
|
|