📄 eeprom读写程序.inc
字号:
i2c_faddr equ 0a0h
mcu_addres equ r0
rd_eeprom_time equ r2
wr_eeprom_time equ r2
sda bit p1.5
clk bit p1.4
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;读eeprom
i2c_read: acall i2caddress_set
i2c_read_1: lcall start
mov a,#i2c_faddr
setb acc.0
lcall shout
nop
nop
acall shin
;=========================
;如果eeprom为空则进行初始化
;依据不同程序而定 ;=
cjne a,#0ffh,i2c_read_2 ;=
mov a,#"0" ;=
;=========================
i2c_read_2: mov @mcu_addres,a
inc mcu_addres
inc dptr
djnz rd_eeprom_time,i2c_read_1
lcall NAK
lcall ACK
lcall stop
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;i2c固定地址及可编程地址设定===================;=
i2caddress_set: ;=
CLR C ;=
lcall START ;=
MOV A,#i2c_faddr ;=
CLR ACC.0 ;=
lcall SHOUT ;=
jc i2caddress_set_1 ;=
;24C512高位地址------------------ ;=
;依据不同eeprom而定
;mov a,dph ;=
;lcall shout ;=
;jc i2caddress_set_1 ;=
;-------------------------------- ;=
mov a,dpl ;=
lcall shout ;=
i2caddress_set_1: ;=
lcall eeprom_error_detecto_pro ;=
ret ;=
;==============================================;=
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
shin: setb sda
push b
mov b,#8
x43: nop
nop
nop
setb clk
nop
nop
mov c,sda
rlc a
clr clk
djnz b,x43
pop b
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
ACK: clr sda
nop
nop
setb clk
nop
nop
nop
nop
clr clk
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
NAK: setb sda
nop
nop
setb clk
nop
nop
nop
nop
clr clk
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;写eeprom程序
WRI_I2C_PART: push 03h
push 04h
wri_i2c_part_a: setb sda
setb clk
wri_i2c_part_1: lcall i2caddress_set
mov a,@mcu_addres
wri_i2c_part_b: lcall shout
clr c
acall stop
mov r4,#39
i2c_wri1: djnz r3,$
djnz r4,i2c_wri1
wri_i2c_part_2: inc dptr
INC mcu_addres
DJNZ wr_eeprom_time,WRI_I2C_PART_a
pop 04h
pop 03h
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;清除eeprom数据
clear_eeprom_data: push 03h
push 04h
push b
mov b,#37h+1;清除区域由不同程序而定
mov dptr,#0
clear_eeprom_data_a: setb sda
setb clk
clear_eeprom_data_1: lcall i2caddress_set
mov a,#0ffh
clear_eeprom_data_b: lcall shout
clr c
acall stop
mov r4,#39
clear_eeprom_data1: djnz r3,$
djnz r4,clear_eeprom_data1
clear_eeprom_data_2: inc dptr
DJNZ b,clear_eeprom_data_a
pop b
pop 04h
pop 03h
ret
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;启动程序
start:
;-----------------------
;eeprom片选控制,根据不同硬件而定
orl p1,#00000111b;选择i2c rom
anl p1,#11111010b
;-----------------------
setb sda
setb clk
jnb sda,x40
jnb clk,x40
nop
clr sda
nop
nop
nop
nop
nop
clr clk
clr c
jmp x41
x40: setb c
x41: ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;停止程序
stop: clr sda
nop
setb clk
nop
nop
nop
nop
nop
setb sda
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;数据传送
shout: push b
mov b,#8
x42: rlc a
mov sda,c
nop
setb clk
nop
nop
nop
nop
clr clk
djnz b,x42
setb sda
nop
nop
setb clk
nop
nop
nop
nop
mov c,sda
clr clk
pop b
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include<EEPROM错误检测.INC>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -