;****************************************************************
; eeprom page write subprogram *
; for 24c32 to 24c64 *
; call format: wrtepr(rwaddr,r3,txdata...) *
; input: 首地址waddr,写字节数r3,写数据r0首地址... *
; return: *
; output: null *
; note: using -- r0,r2,r3,acc, *
; rwaddr,txdata... *
;****************************************************************
eprpagewrt: ;mov r0, #txdata+0
lcall eprstart
;mov a, eeprompage
;rl a
;orl a, #0a0h
mov a, #0a0h
lcall wrtaccdata
lcall testack
mov a, rwaddr+0 ; high addr.
lcall wrtaccdata
lcall testack
mov a, rwaddr+1 ; low addr.
lcall wrtaccdata
lcall testack
wrtnextpagebtye:
mov a, @r0
lcall wrtaccdata
lcall testack
inc rwaddr
inc rwaddr
inc r0
djnz r3, wrtnextpagebtye
lcall eprover
lcall delay5ms
lcall delay5ms
ret
;****************************************************************
; eeprom read subprogram *
; for 24c00 to 24c16 *
; call format: readepr ; 参数:r3读字节数,rwaddr *
; return: *
; note: using -- r0,r2,r3,r4,r5 *
; rwaddr,acc *
; 不更改rwaddr的值. *
;****************************************************************
readepr: lcall eprstart
;mov a, eeprompage
;rl a
;orl a, #0a0h
mov a, #0a0h
lcall wrtaccdata
lcall testack
mov a, rwaddr+0 ; high addr.
lcall wrtaccdata
lcall testack
mov a, rwaddr+1 ; low addr.
lcall wrtaccdata
lcall testack
lcall eprstart
;mov a, eeprompage
;rl a
;orl a, #0a1h
mov a, #0a1h
lcall wrtaccdata
lcall testack
mov r0, ar5 ;#eepromdata+0
ff5: setb bioeepromsda
clr a
clr c
lcall readtoacc
mov @r0, a
lcall wrtack
inc r0
djnz r3, ff5
setb bioeepromsda
clr a
clr c
lcall readtoacc
mov @r0, a
lcall eprover
ret
;----------------------------------------
testack: setb bioeepromsda
nop ; 22.1184 mhz.
setb boeepromscl
nop ; 22.1184 mhz.
clr boeepromscl
ret
;----------------------------------------
wrtack: clr bioeepromsda
nop
setb boeepromscl
nop
clr boeepromscl
ret
;----------------------------------------
eprstart: setb bioeepromsda
nop
setb boeepromscl
nop
clr bioeepromsda
nop
clr boeepromscl
ret
;----------------------------------------
eprover: clr boeepromscl
nop
clr bioeepromsda
nop
setb boeepromscl
nop
setb bioeepromsda
ret
;----------------------------------------
readtoacc: mov r4, #08d
ff4: setb boeepromscl
nop
jnb bioeepromsda, $+4
setb c
clr boeepromscl
rlc a
djnz r4, ff4
ret
;----------------------------------------
wrtaccdata: rlc a
mov r2, #08d
ee1: clr bioeepromsda
jnc $+4 ; c bit read.
setb bioeepromsda
nop
setb boeepromscl
nop
clr boeepromscl
rlc a
djnz r2, ee1
ret