新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 51单片机控制24C02串行E2PROM的读写

51单片机控制24C02串行E2PROM的读写

作者:时间:2013-03-21来源:网络收藏


读写子程序如下:

;写串行子程序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,

  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

RER
DELAY: NOP

  NOP
  RET
;读串行子程序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 ;送停止信号
  RE
SUBR: MOV  R0,#08H ;接受单字节子程序

LOOP2: SETB  P1.1
  ACALL DELAY
  MOV C,P1.0

  RLC 
  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
  程序中多处调用了DELAY子程序(仅两条NOP指令),这是为了满足I2C总线上数据传送速率的要求,只有当SDA数据线上的数据稳定下来之后才能进行读写(即SCL线发出正脉冲)。另外,在读最后一数据字节时,置应答信号为“1”,表示读操作即将完成。
上拉电阻相关文章:上拉电阻原理

上一页 1 2 3 下一页

关键词: 51单片机 24C02 E2PROM

评论


相关推荐

技术专区

关闭