📄 xx250.asm
字号:
;---------------- Define ---------------------------------------------------
WREN equ 00000110b ; Set the Write Enable Latch *
WRDI equ 00000100b ;
RDSR equ 00000101b ; Read Status Reg *
WRSR equ 00000001b ; Write Status Reg *
DREAD equ 00000011b ; Read Data *
DWRITE equ 00000010b ; Write Data *
WatchDog equ 00000000b ; Enable Watch Dog
;---------------- Port --------------------------------------------------
CS BIT p1.5 ; AT25xxx chip select
SCK BIT p1.2 ; serial data clock
SI BIT p1.3 ; serial data input
SO BIT p1.4 ; serial data output
A8 BIT acc.3 ; MSB of address
NRDY BIT acc.0 ; high = write cycle in progress
WEN BIT acc.1 ; high = memory write enabled
BP0 BIT acc.2 ; block write protection levels
BP1 BIT acc.3 ;
;---------------------- Register definitions. --------------------------
BufPt EQU r0 ; buffer pointer
kount EQU 11h ; byte count register
E2Addr EQU r2 ; 2-byte address register
E2Addrr equ 12h
E2AddrCount EQU 13h ; data register
TempReg EQU 14h ; r5
RbCom bit 0
E2A8 bit 1
;---------------------- Constant --------------------------
Fs10ByteBuf equ 7fh ;Net Data In 7f - 76
Sc10ByteBuf equ 75h ;Temp Buffer for Programing Usage 75-6b
Tk8ByteBuf equ 5Dh ;Save The Task 5D - 56 8byte
RomBg equ 1Fh ;*
EEROMInit: ;------------------------------------------------------------
setb CS ; high
clr SCK ; low
setb SI ; high
setb SO ; high
acall read_status ; check write status
anl a,#0111100b
cjne a,#WatchDog,EEROMInit_InitE2
acall ReadStatusMem
ret
EEROMInit_InitE2:
acall enable_write ; must precede status register write
acall write_status ; write protection level
EEROMInit_L:
acall read_status ; check write status
jb NRDY,EEROMInit_L ; loop until ready
mov ILLUM_L1 ,#180
ret
ReadStatusMem: ;------------------------------------------------------------
setb rs1
clr E2A8 ;
mov E2Addrr,#0 ;
mov kount,#1 ; Read Least Level
mov BufPt,#ILLUM_L1A ;
clr RbCom ;
acall ReadBlock ;
clr E2A8 ;
mov E2Addrr,#1 ;
mov kount,#4 ; Read ID
mov BufPt,#mID3 ;
clr RbCom ;
acall ReadBlock ;
setb E2A8 ;
mov E2Addrr,#0 ;
mov kount,#6 ; Read ReedBack Code
mov BufPt,#mFeedBk ;
clr RbCom ;
acall ReadBlock ;
clr rs1
ljmp FnDeterminFeedBack
ReadStates: ;----------------------------------------------------------
setb rs1
ReadStates_Loop:
acall read_status
jb NRDY,ReadStates_Loop ; loop until ready
clr rs1
ret
ReadCommand: ;----------------------------------------------------------
setb rs1
setb E2A8
mov kount,#8
;mov BufPt,#Tk8ByteBuf
mov BufPt,#Fs10ByteBuf
clr RbCom
acall ReadBlock
clr rs1
ret
SeekFree: ;-----------------------------------------------------------
; Distory = #Fs10ByteBuf Return = E2Adr
setb rs1
mov Fs10ByteBuf-0,#0
clr E2A8 ;* ID
mov E2AddrCount,#RomBg
SeekFree_L:
mov A,E2AddrCount
rl A ;*
rl A
rl A
mov E2Addrr,A
mov kount,#1 ;*
mov BufPt,#Fs10ByteBuf
setb RbCom
acall ReadBlock
jnc CompRom_scc
djnz E2AddrCount,SeekFree_L
SeekFree_err:
mov E2Addrr,#0
SeekFree_scc:
clr RS1
ret
CompRom: ;----------------------------------------------------------
; #Fs10ByteBuf = Compare data location [X] E2AddrCount
; Return ID equ Address E2Addr
setb rs1
clr E2A8
mov E2AddrCount,#RomBg
CompRom_L:
acall Dimmer_WavCheck ;*
mov A,E2AddrCount
rl A ;*
rl A
rl A
mov E2Addrr,A
mov kount,#8 ;*
mov BufPt,#Fs10ByteBuf
setb RbCom
acall ReadBlock
jnc CompRom_scc
djnz E2AddrCount,CompRom_L
CompRom_err:
mov E2Addrr,#0
CompRom_scc:
clr RS1
ret
ReadBlock: ;------------------------------------------------------------
; Rom Address =E2A8 E2Addrr DataBuffer Address = BufPt
; Number of write = kount Compare SEt = RbCom
; Return C = F(1) / T(0) [X]TempReg
clr CS
mov a, #DREAD
jnb E2A8,ReadBlock_Adr
setb A8
ReadBlock_Adr:
acall shout
mov a,E2Addrr
acall shout
ReadBlock_L:
acall shin ; get data
jb RbCom,ReadBlock_Comp
mov @BufPt,A
sjmp ReadBlock_N
ReadBlock_Comp:
mov TempReg,@BufPt
cjne a,TempReg,ReadBlock_CmpNtEqu
ReadBlock_N:
dec BufPt ;; ***** Reserve Save ********
acall Dimmer_WavCheck ;
djnz kount,ReadBlock_L
clr c
setb CS
ret
ReadBlock_CmpNtEqu:
setb c
setb CS
ret
read_byte: ;-----------------------------------------------------------
; Return A
clr CS
mov a, #DREAD
jnb E2A8,read_byteAdr
setb A8
read_byteAdr:
acall shout
mov a,E2Addrr
acall shout
acall shin
setb CS
ret
ClearRom: ;-----------------------------------------------------------
setb rs1
setb E2A8
mov E2Addrr,#0
ClearRom_L1:
mov A,#0
acall write_byte
djnz E2Addrr,ClearRom_L1
clr E2A8
ClearRom_L2:
mov A,#0
acall write_byte
dec E2Addrr
cjne E2Addr,#0Eh,ClearRom_L2
clr rs1
clr bFBDimEn
clr bFBFurEn
ret
WriteStatusMem: ;----------------------------------------------------
setb rs1
clr E2A8
mov BufPt,#ILLUM_L1A
mov E2Addrr,#0
mov kount,#1
acall WriteBlock
clr rs1
ret
WriteInDataRom: ;-----------------------------------------------------------
; E2Adrr Save the address
; Save Data From Sc10ByteBuf & Tk8ByteBuf
setb rs1
cjne E2Addr,#0,WriteInDataRom_E
clr rs1
ret
WriteInDataRom_E:
mov a,Tk8ByteBuf ;*
orl a,Tk8ByteBuf-1
orl a,Tk8ByteBuf-2
orl a,Tk8ByteBuf-3
jnz WriteInDataRom_BeepIn
WriteInDataRom_BeepClear:
clr E2A8
mov Sc10ByteBuf,#0
mov BufPt,#Sc10ByteBuf
mov kount,#1
acall WriteBlock
mov a,#01000011b ; Write process
acall BeepAnn
clr rs1
ret
WriteInDataRom_BeepIn:
clr E2A8
mov BufPt,#Sc10ByteBuf
mov kount,#8
acall WriteBlock
setb E2A8
mov BufPt,#Tk8ByteBuf
mov kount,#8
acall WriteBlock
mov a,#00100011b
acall BeepAnn
clr rs1
ret
WriteBlock: ;-------------------------------------------------------------
; Rom Address =E2A8 E2Addrr DataBuffer Address = BufPt
; Number of write = kount
push E2Addrr
WriteBlock_L:
mov a,@BufPt
acall write_byte
dec BufPt ;; ***** Reserve Save ********
inc E2Addrr
cjne E2Addr,#0,WriteBlock_N
cpl E2A8
WriteBlock_N:
djnz kount,WriteBlock_L
pop E2Addrr
ret
write_byte: ;---------------------------------------------------------------
; Rom Address - E2A8 E2Addrr
push acc ; save data
Writebyte_Loop:
; acall ??????
acall read_status
jb NRDY,Writebyte_Loop ; loop until ready
acall enable_write
clr CS ; select device
mov a, #DWRITE ; get command
jnb E2A8,Writebyte_Adr
setb A8
Writebyte_Adr
acall shout ; send command and high bit of address
mov a,E2Addrr ; get low byte of address
acall shout ; send low byte of address
pop acc ; restore data
acall shout ; send data
clr SCK ; drop clock
nop ; enforce delay
setb CS ; deselect device
ret
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -