⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eeprom读写程序.inc

📁 i2c总线eeprom读写程序 可以读些从21c01--24c512的i2c总线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 + -