📄 at24d02芯片的读程序.txt
字号:
EEPROM_SCL EQU p3.2
EEPROM_SDA EQU p3.4
BEEP EQU p2.0
CURR_NUM EQU 70H ;HEX
;***********************************************
org 0000H
jmp MAIN
;***************************************************
org 0030H
MAIN:
mov p0,#0FFH
mov p1,#0FFH
mov p2,#0FFH
mov P3,#0FFH
mov CURR_NUM,#00H
;open beep
clr BEEP
;read date from EEPROM
mov dptr,#0700H
call GET_ROM_ONE
;mov CURR_NUM,a
;close beep
setb BEEP
MAIN_LOOP:
call DISPLAY_NUM
jmp MAIN_LOOP
ret
;********************************************************
GET_ROM_ONE:
push DPL
push DPH
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
;start
clr EEPROM_SCL
setb EEPROM_SDA
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 1,the tag of read
setb EEPROM_SDA ;send 1
setb EEPROM_SCL
clr EEPROM_SCL
/*wait for ACK*/
setb EEPROM_SDA
setb EEPROM_SCL
ACK_READ_DEVICE:
mov c,EEPROM_SDA
jc ACK_READ_DEVICE
/*Read byte from EEPROM*/
clr EEPROM_SCL
mov B,#08H
READ_DATA_LOOP:
RL A ;read 1_bit to acc.0
setb EEPROM_SDA
setb EEPROM_SCL
mov c,EEPROM_SDA
mov acc.0,c
clr EEPROM_SCL
djnz B,READ_DATA_LOOP
mov CURR_NUM,A
setb EEPROM_SDA
setb EEPROM_SCL
;stop
clr EEPROM_SCL
clr EEPROM_SDA
setb EEPROM_SCL
setb EEPROM_SDA
/*send 1 when pin is idle*/
setb EEPROM_SCL
setb EEPROM_SDA
;pop acc
pop DPH
pop DPL
ret
;************************************************************
DISPLAY_NUM:
mov a,CURR_NUM
mov b,#0AH
div ab
mov R0,a
mov a,b
mov dptr,#TAB_LED
movc a,@a+dptr
mov p0,a
mov p2,#11111011B
call DELAY_DISP
mov a,R0
mov dptr,#TAB_LED
movc a,@a+dptr
mov p0,a
mov p2,#11110111B
call DELAY_DISP
ret
;***********************************************************
DELAY:
mov R7,#200
DELAY_LOOP:
mov R6,#200
djnz R6,$
mov R6,#200
djnz R6,$
djnz R7,DELAY_LOOP
DELAY_DISP:
mov R7,#10
DELAY_DISP_LOOP:
mov R6,#200
djnz R6,$
mov R6,#200
djnz R6,$
djnz R7,DELAY_DISP_LOOP
ret
;*************************************************************
TAB_LED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;***********************************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -