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

📄 xx250.asm

📁 很好的源代码,x250汇编源码,X250读写功能,
💻 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 + -