?? 讀寫e2prom子程序.asm
字號:
;讀寫E2PROM子程序如下:
;寫串行E2PROM子程序EEPW
; R3=10100000(命令1010+器件3位地址+讀/寫。 器件地址一個芯片,是000)
; (R4)=片內字節地址
; (R1)=欲寫數據存放地址指針
; (R7)=連續寫字節數n
ORG 0000H
LJMP EEPW
ORG 0030H
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
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -