打印

at24c02的字节写程序.经实验,现象有几种.

[复制链接]
3580|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wplparam|  楼主 | 2007-7-22 16:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有时能写上并正确,有时出错1个字.有时只写上00地址的一个.请帮忙分析什么原因,硬件没有问题.
 PADDR        EQU    0        ; programmable address (0..7)        
 SIZE        EQU    100h        ; bytes per AT24C02
 PSIZE        EQU    8        ; bytes per page for AT24C02         
 FILL        EQU    55h        ; example fill value                 
 SCL BIT P3.4
 SDA BIT P3.5
 setb SDA
 setb SCL
 mov r1,#FILL
 mov r2,#0
 mov r3,#100
 mov r4,#4
x52:mov a,#PADDR
  call writebyte
  jnc x53
  djnz r4,x52
  setb c
  jmp x54
x53:
  inc r2
  djnz r3,x52
  clr c
x54:
  ret

writebyte:
 call start
 jc x49
 rl a
 orl a,#FADDR
 clr acc.0
 call shout
 jc x48

; mov a,r3
; call shout
; jc x48

 mov a,r2
 call shout
 jc x48

 mov a,r1
 call shout
 jc x48
 clr c
x48:
 call stop
x49:
 ret
start:
 ;发送开始信号,在SCL为1时,SDA从1跳到0
 ;SDA,SCL返回0
 ;总线无效CY设置为1
 setb SDA
 setb SCL
 jnb SDA,X40
 jnb SCL,X40
 nop
 clr SDA
 nop
 nop
 nop
 nop
 nop
 CLR SCL
 CLR C
 jmp X41
X40:setb C
X41:ret
stop:
 ;发送停止信号,SCL为1时,SDA从0跳到1
 ;SCL,SDA返回1
 clr SDA
 nop
 nop
 setb SCL
 nop
 nop
 nop
 nop
 nop
 setb SDA
 ret
shout:
 ;发送1个字节到at24cxx.
  mov r0,#8
X42:rlc a
 mov SDA,C
 nop
 nop
 setb SCL
 nop
 nop
 nop
 nop
 clr SCL
 djnz r0,X42
 setb SDA
 nop
 nop
 setb SCL
 nop
 nop
 nop
 nop
 mov c,SDA
 clr SCL
 ret
 end

相关帖子

沙发
NE5532| | 2007-7-22 16:50 | 只看该作者

那么肯定?硬件为啥没问题?

使用特权

评论回复
板凳
hotpower| | 2007-7-22 18:22 | 只看该作者

给点层次感嘛,否则谁愿意看???

使用特权

评论回复
地板
lbx_00| | 2007-7-22 19:24 | 只看该作者

监测ACK,如果没有,一切重来

还有,开始和结束的时候,试验阶段多给一些延迟,成功后再慢慢剔除。

使用特权

评论回复
5
conwh| | 2007-7-22 20:16 | 只看该作者

这里有现成的,找找看吧

使用特权

评论回复
6
ayb_ice| | 2007-7-23 07:39 | 只看该作者

硬件就两根线,还能出问题...

使用特权

评论回复
7
zhaoyu2005| | 2007-7-23 07:47 | 只看该作者

你以为两根线就不会出问题了?

天真

使用特权

评论回复
8
ayb_ice| | 2007-7-23 10:27 | 只看该作者

随便说说

硬件就两根线,还能出问题?-->那是真正的高手...

使用特权

评论回复
9
NE5532| | 2007-7-23 20:54 | 只看该作者

USB也就两根线,几个人搞懂了?

还是用示波器测一下波形吧。

使用特权

评论回复
10
wplparam|  楼主 | 2007-8-14 01:35 | 只看该作者

谢谢各位高手的回答.

本人经过学习,说一下:
1.两根线没有问题,硬件没有问题,我用这个电路跑过其他程序.也实验过其他写24c02的程序.

2.程序层次感是没有问题的.nop用的多了点,在学习阶段这样写便于改正问题.

3.24c02厂商datasheet列出写时间是5ms.在写期间24c02不理会主器件给它的命令.本程序反复发送命令查询应答信号.mov r4,#4语句的#4太小,满足不了5ms的写时间.改大.

4.对于我这个初学者来说,用现成的程序还不行.那样学不到东西.

5.好象就不能保证写1次就能写进去,并能保证正确.是不是还应该有校验的程序呢?各位大虾是怎么做的呢?



使用特权

评论回复
11
ayb_ice| | 2007-8-14 07:33 | 只看该作者

反复看IIC协议和程序...

使用特权

评论回复
12
zhaoyu2005| | 2007-8-14 17:24 | 只看该作者

ayb_ice大侠说的很对

反复看I2C协议和时序图,能在脑袋里放电影,再回来对照你的程序,你能很快找到问题。俺当初也是编不好,当时急用就让同事帮忙写了一个,也没有仔细看,等过了一年再次用到时,好好看看了协议一下子就写对了,单字节读写,页写,任意字节读一下子通过

使用特权

评论回复
13
diannaoza| | 2007-8-15 01:26 | 只看该作者

搞个逻辑分析仪

就怕写好了,没地方用呢?HE。。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

43

帖子

0

粉丝