导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→我发一个24C02的读写程序,大家看看怎么样

* 89275: 我发一个24C02的读写程序,大家看看怎么样

   单★片★机 
单★片★机发表的帖子 

 我发一个24C02的读写程序,大家看看怎么样
;这是将0600H地址中以下的8个数据写到24C02的01H为首址单元中去的汇编程序

转自电子制作
ORG 0000H 

SCL BIT P3.4;定义24C02的串行时钟线 
SDA BIT P3.5;定义24C02的串行数据线

LJMP START
START:LCALL STAR;调用
MOV R2,#08H;一个数据有8位
MOV DPTR,#0600H;定义源数据的位置
LOOP:MOV A,#00H
MOVC A,@A+DPTR
LCALL SDATA
LCALL ACK
JC LOOP
INC DPTR
DJNZ R2,LOOP

LCALL STOP;调用停止子程序

STAR:SETB SDA
SETB SCL
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
CLR SCL
RET
SDATA:MOV R0,#08H
LOOP0:RLC A
MOV SDA,C
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
DJNZ R0,LOOP0
RET
ACK:SETB SDA
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
MOV C,SDA
CLR SCL
RET
STOP:CLR SDA
NOP
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
RET
ORG 0600H
DB 0A0H,10H,01H,02H,03H,04H,05H,06H
END

  读写子程序如下:

;写串行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



发表时间:2006年2月23日19:27:25

  
回复该帖

本主题共有 4 帖,分页:>>>>>该主题的所有内容[4]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  89328.[详细]单片机好友
摘要:这位老兄,你能不能发了个24C16的读写程序呀.我在这多谢了.......(54字)
- [望远镜][928次] 2006年2月24日

  89359.[详细]我这没现成的  我让朋友给你
摘要:我让我朋友给你写个吧 ?   我这里没现成的......(39字)
- [单★片★机][923次] 2006年2月25日

  95691.[详细]一个字------------------好
摘要:2416也好用,华胃网上的不好用......(28字)
- [GZTXGS][786次] 2006年7月15日

[上一篇帖子]:这个工作经验值多少?我现在在厦门从事PIC单片机工作已经2年,其主要应用是在舞台灯光设计方面的应用
[下一篇帖子]:X9241在用该系列的电位器时,写WCR要不要等应答? 好象我不等也可以实现啊 还有