;**************************************
;**************24C02的写操作***********
ROM_WRITE PROC
clr sda_c ;设输出模式
clr scl_c
set sda ;起始信号
set scl
call DELAY_8us
clr sda
call DELAY_8us
clr scl
call DELAY_8us
set sda ;器件地址1010
call DELAY_8us
set scl
call DELAY_8us
clr scl
clr sda ;0
set scl
call DELAY_8us
clr scl
set sda ;1
call DELAY_8us
set scl
call DELAY_8us
clr scl
clr sda ;0
set scl
call DELAY_8us
clr scl
clr sda ;a2=0
set scl
call DELAY_8us
clr scl
set scl
call DELAY_8us
clr scl
set scl
call DELAY_8us
clr scl
clr sda
set scl ;R/W=0,设为写模式
call DELAY_8us
clr scl
set sda_c ;设sda为输入模式
call DELAY_8us
set scl
call DELAY_8us
wait_ack:
sz sda ;等待应答信号
jmp wait_ack
clr scl ;写地址
clr sda_c
mov a,08h
mov data_8,a
random_write:
clr sda
sz word_address.7
set sda
call DELAY_8us
set scl
call DELAY_8us
clr scl
rl word_address
sdz data_8
jmp random_write
set sda_c
call DELAY_8us
set scl
call DELAY_8us
fdev:
sz sda ;等待应答信号
jmp fdev
clr scl ;写数据
clr sda_c
mov a,08h
mov data_8,a
data_in:
clr sda
sz write_in.7
set sda
call DELAY_8us
set scl
call DELAY_8us
clr scl
rl write_in
sdz data_8
jmp data_in
set sda_c
set scl
fdev2:
sz sda ;等待应答信号
jmp fdev2
clr scl
clr sda_c
clr sda
set scl
set sda ;停止信号
mov a,30h ;延时
mov delay_5,a
mov a,10h
mov delay,a
delay2:
sdz delay_5
jmp delay2
sdz delay
jmp delay2
ret
ROM_WRITE ENDP
;********************************
;**************读24C02操作*******
ROM_READ PROC
clr read_out
clr sda_c
clr scl_c
set sda
call DELAY_8us
set scl
call DELAY_8us
clr sda ;起始信号
clr scl
set sda ;1
call DELAY_8us
set scl
call DELAY_8us
clr scl
clr sda ;0
set scl
call DELAY_8us
clr scl
set sda ;1
call DELAY_8us
set scl
call DELAY_8us
clr scl
clr sda ;0
set scl
call DELAY_8us
clr scl
clr sda ;a2=0
set scl
call DELAY_8us
clr scl
set scl
call DELAY_8us
clr scl
set scl
call DELAY_8us
clr scl
clr sda
set scl ;写模式
call DELAY_8us
clr scl
set sda_c
set scl
call DELAY_8us
wait:
sz sda ;等待应答信号
jmp wait
clr scl ;写读操作的地址
clr sda_c
mov a,08h
mov data_8,a
read_address_in:
clr sda
sz word_address.7
set sda
call DELAY_8us
set scl
call DELAY_8us
clr scl
rl word_address
sdz data_8
jmp read_address_in
set sda_c
set scl
call DELAY_8us
FDEV1:
sz sda ;等待应答信号
jmp fdev1
clr scl
clr sda_c
read_data:
set sda
call DELAY_8us
set scl
call DELAY_8us
clr sda ;起始信号
clr scl
set sda ;1
call DELAY_8us
set scl
call DELAY_8us
clr scl
clr sda ;0
set scl
call DELAY_8us
clr scl
set sda ;1
call DELAY_8us
set scl
call DELAY_8us
clr scl
clr sda ;0
set scl
call DELAY_8us
clr scl
clr sda ;a2=0
set scl
call DELAY_8us
clr scl
clr sda
set scl
call DELAY_8us
clr scl
clr sda
set scl
call DELAY_8us
clr scl
set sda ;读模式
call DELAY_8us
set scl
call DELAY_8us
clr scl
set sda_c
set SCL
call DELAY_8us
w_ack:
sz sda ;等待应答信号
jmp w_ack
clr scl
set sda_c
mov a,08h
mov data_8,a
random_out:
set scl
clr read_out.7
sz sda
set read_out.7
clr scl
rl read_out
sdz data_8
jmp random_out
clr sda_c
set sda
set scl
clr scl
clr sda ;停止信号
set scl
set sda
ret
ROM_READ ENDP
;**********************************
;***************延时8us秒**********
DELAY_8us:
mov a, 1
mov D_TEMP,a
D8US:
sdz D_TEMP
jmp D8US
ret
;**********************************
|