这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 我是菜鸟帮忙看看好吗?

共2条 1/1 1 跳转至

我是菜鸟帮忙看看好吗?

院士
2006-09-17 18:14:16     打赏
我是菜鸟帮忙看看好吗?



关键词: 我是     菜鸟     帮忙     看看     好吗    

院士
2006-12-22 22:43:00     打赏
2楼
问 24C04读写位数多了就会出现乱码,我用的是4K的是不是地址错了,4K的怎么送啊?????请各位行家给看看好吗???
  读写子程序如下:

;写串行E2PROM子程序EEPW
; R3=10100000(命令1010+器件3位地址+读/写。 器件地址一个芯片,是000)
; (R4)=片内字节地址
; (R1)=欲写数据存放地址指针
; (R7)=连续写字节数n
EEPW: MOV P1,#0FFH

  CLR  P1.0  ;发开始信号
  MOV  A,R3  ;送器件地址
  ACALL  SUBS
  MOV  A,R4  ;送片内字节地址
  ACALL SUBS
AGAIN: MOV A,@R1
  ACALL SUBS ;调发送单字节子程序INC   R1
  DJNZ  R7,AGAIN;连续写n个字节
  CLR    P1.0  ;SDA置0, 准备送停止信号
  ACALL DELAY ;延时以满足传输速率要求
  SETB   P1.1  ;发停止信号
  ACALL DELAY
  SETB   P1.0
  RET

SUBS: MOV R0,#08H ;发送单字节子程序
LOOP: CLR P1.1
  RLC  A
  MOV  P1.0,C
  NOP
  SETB P1.1
  ACALL DELAY
  DJNZ R0,LOOP ;循环8次送8个bit
  CLR  P1.1
  ACALL DELAY
  SETB P1.1
REP: MOV C,P1.0
  JC  REP  ;判应答到否,未到则等待
  CLR  P1.1
  RET

DELAY: NOP
  NOP
  RET


;读串行E2PROM子程序EEPR
;(R1)=欲读数据存放地址指针
;; R3=10100001(命令1010+器件3位地址+读/写。 器件地址一个芯片,是000)
;(R4)=片内字节地址
;(R7)=连续读字节数

EEPR: MOV P1,#0FFH
  CLR  P1.0  ;发开始信号
  MOV  A,R3  ;送器件地址
  ACALL SUBS   ;调发送单字节子程序
  MOV A,R4   ;送片内字节地址
  ACALL SUBS
  MOV P1,#0FFH
  CLR P1.0   ;再发开始信号
  MOV A,R3
  SETB ACC.0  ;发读命令
  ACALL SUBS
MORE: ACALL SUBR
  MOV @R1,A
  INC R1
  DJNZ R7,MORE
  CLR P1.0
  ACALL DELAY
  SETB P1.1
  ACALL DELAY
  SETB P1.0 ;送停止信号
  RET

SUBR: MOV  R0,#08H ;接受单字节子程序
LOOP2: SETB  P1.1
  ACALL DELAY
  MOV C,P1.0
  RLC A
  CLR P1.1
  ACALL DELAY
  DJNZ R0,LOOP2
  CJNE R7,#01H,LOW
  SETB P1.0  ;若是最后一个字节置A=1
  AJMP SETOK
LOW: CLR P1.0  ;否则置A=0
SETOK: ACALL DELAY
  SETB  P1.1
  ACALL DELAY
  CLR  P1.1
  ACALL DELAY
  SETB P1.0  ;应答毕,SDA置1
  RET
1: 汇编语言看不太明白。 2: 我也遇到过类似的问题。    看到你发了两个帖子,都没有人回复你。你好可怜!我也遇到过类似的问题,当时也没有人管我。
    我当时用的是24C01。数据手册上写的是1K(128X8)。本以为是1K的,结果却不能用。后来才知道是1K(128X8)比特不是字节。后来换了个大一点的就好了。
    我猜你也是因为这个原因吧。换一个大一点的就可以了。:)等待你的好消息啊!

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]