📄 at24d02芯片的写程序.txt
字号:
EEPROM_SCL EQU p3.2
EEPROM_SDA EQU p3.4
BEEP EQU p2.0
WRITE_NUM EQU 70H ;HEX
;***********************************************
org 0000H
jmp MAIN
;***************************************************
org 0030H
MAIN:
mov p0,#0FFH
mov p1,#0FFH
mov p2,#0FFH
mov P3,#0FFH
mov WRITE_NUM,#00H
;open beep
clr BEEP
mov dptr,#0700H
mov WRITE_NUM,#10
call WRITE_ROM_ONE
mov dptr,#0701H
mov WRITE_NUM,#03
call WRITE_ROM_ONE
mov dptr,#0702H
mov WRITE_NUM,#39
call WRITE_ROM_ONE
mov dptr,#0703H
mov WRITE_NUM,#56
call WRITE_ROM_ONE
mov dptr,#0704H
mov WRITE_NUM,#89
call WRITE_ROM_ONE
;stop beep
setb BEEP
jmp $
ret
;***************************************************
WRITE_ROM_ONE:
push DPL
push DPH
push acc
setb EEPROM_SDA ;strat
setb EEPROM_SCL
clr EEPROM_SDA
clr EEPROM_SCL
;send control word
setb EEPROM_SDA ;send 1
setb EEPROM_SCL
clr EEPROM_SCL
clr EEPROM_SDA ;send 0
setb EEPROM_SCL
clr EEPROM_SCL
setb EEPROM_SDA ;send 1
setb EEPROM_SCL
clr EEPROM_SCL
clr EEPROM_SDA ;send 0
setb EEPROM_SCL
clr EEPROM_SCL
/*send device address A2*/
mov a,dph ;send 1
mov c,acc.2
mov EEPROM_SDA,c
setb EEPROM_SCL
clr EEPROM_SCL
/*send device address A1*/
mov a,dph ;send 1
mov c,acc.1
mov EEPROM_SDA,c
setb EEPROM_SCL
clr EEPROM_SCL
/*send device address A0*/
mov a,dph ;send 1
mov c,acc.0
mov EEPROM_SDA,c
setb EEPROM_SCL
clr EEPROM_SCL
;send 0,the tag of write
clr EEPROM_SDA ;send 0
setb EEPROM_SCL
clr EEPROM_SCL
/*wait for ACK*/
setb EEPROM_SDA
setb EEPROM_SCL
ACK_WRITE_DEVICE:
mov c,EEPROM_SDA
jc ACK_WRITE_DEVICE
;send 8-bit date word address following the device address
clr EEPROM_SCL
mov A,dpl
mov B,#08H
WORD_ADDR_LOOP:
mov c,acc.7
mov EEPROM_SDA,c
setb EEPROM_SCL
clr EEPROM_SCL
RL A
djnz B,WORD_ADDR_LOOP
;wait for acr
setb EEPROM_SDA
setb EEPROM_SCL
ACK_WRITE_ADDRESS:
mov c,EEPROM_SDA
jc ACK_WRITE_ADDRESS
clr EEPROM_SCL
mov A,WRITE_NUM
mov B,#08H
/*write data*/
WRITE_DATA_LOOP:
mov c,acc.7
mov EEPROM_SDA,c
setb EEPROM_SCL
clr EEPROM_SCL
RL A
djnz B,WRITE_DATA_LOOP
;wait for acr
setb EEPROM_SDA
setb EEPROM_SCL
ACK_WRITE_DATA:
mov c,EEPROM_SDA
jc ACK_WRITE_DATA
;stop
clr EEPROM_SCL
clr EEPROM_SDA
setb EEPROM_SCL
setb EEPROM_SDA
/*send high when pin is idle*/
setb EEPROM_SCL
setb EEPROM_SDA
pop acc
pop dph
pop dpl
call DELAY1
ret
;********************************************
DELAY1:
mov R2,#00H
DELAY11:
mov R3,#0E0H
djnz R3,$
djnz R2,DELAY11
ret
;*********************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -