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

📄 45d041.asm

📁 关于45D041的操作例程参考
💻 ASM
📖 第 1 页 / 共 2 页
字号:
    RET   
    
;;;;THE SOURCE DAY IS IN 50H--->    
CMPDAY:
    MOV  R1,#20H
    MOV  R0,#50H
    MOV  A,@R0
    MOV  B,A
    MOV  A,@R1
    CJNE A,B,BREAK                 
    INC  R0
    INC  R1
    MOV  A,@R0
    MOV  B,A
    MOV  A,@R1
    CJNE A,B,BREAK                 
    INC  R0
    INC  R1
    MOV  A,@R0
    MOV  B,A
    MOV  A,@R1
    CJNE A,B,BREAK                 
    INC  R0
    INC  R1
    MOV  A,@R0
    MOV  B,A
    MOV  A,@R1
    CJNE A,B,BREAK                 
    SETB C 
    JMP  EXITCMP
BREAK:
    CLR  C
EXITCMP:    
    RET    

;;;;EXAMPLE:
;;;;MOV    R0,#HHHH
;;;;MOV    A,#00H
;;;;MOV    @R0,A
;;;;MOV    R0,#HHLL
;;;;MOV    A,#00H
;;;;MOV    @R0,A
;;;;MOV    R0,#LLLL
;;;;MOV    A,#00H
;;;;MOV    @R0,A
;;;;MOV    R2,#16
;;;;LCALL  RMAINP

;;; MAIN  memory  PAGE   READ
;;;;the read operation will continue until a low to high transition on cs
;;;;if operation will only be kept in the same page
;;;;--When the end of a page in main memory is reached during a main memory
;;;;--page read,the device will continuing reading at the begigning of the
;;;;--same page

;;;;;input:   R2  ---THE NUMBER OF BYTES TO  BE  READ
;;;;;  THE  DATA IS SAVED IN 20H --->..
RMAINP:
   CLR    CS
   NOP
   NOP
   LCALL  DELAY1 
   MOV    B,#52H
   LCALL  WABYTE
   
   MOV    R0,#HHHH
   MOV    A,@R0
   MOV    B,A
   LCALL  WABYTE
   MOV    R0,#HHLL
   MOV    A,@R0
   MOV    B,A
   LCALL  WABYTE
   MOV    R0,#LLLL  ;;;BA0--B80:specify the starting byte address
   MOV    A,@R0
   MOV    B,A
   LCALL  WABYTE

   MOV    B,#00H    ;;;;32  DON'T CARE BITS
   LCALL  WABYTE
   MOV    B,#00H
   LCALL  WABYTE
   MOV    B,#00H
   LCALL  WABYTE
   MOV    B,#00H
   LCALL  WABYTE

   MOV    R0,#20H
LWWP:
   LCALL  RABYTE
   MOV    A,B
   MOV    @R0,A
   INC    R0 
   DJNZ   R2,LWWP
   SETB   CS
   RET


;;; BUFFER1  TO  MAIN PAGE MEMORY
;;;;;input:HHLL,LLLL  ---PAGE ADDRESS    BITS
;;;;;  THE  DATA IS SAVED IN 20H --->..
BFTOMAIN:
   CLR    CS
   NOP
   NOP
   LCALL  DELAY1 
   MOV    B,#83H
   LCALL  WABYTE
   MOV    R0,#HHHH ;;;THE FOUR RESERVED BITS AND FOUR PAGE ADDRESS LINE
   MOV    A,@R0
   MOV    B,A
   LCALL  WABYTE
   MOV    R0,#HHLL
   MOV    A,@R0
   MOV    B,A
   LCALL  WABYTE

   MOV    B,#00H    ;;;;9  DON'T CARE BITS
   LCALL  WABYTE

   SETB   CS
   RET

;;;   AUTO  PAGE REWRITE THROUGH BUFFER1
;;;;; input:HHLL,LLLL  ---PAGE ADDRESS    BITS
;;;;; THE  DATA IS SAVED IN 20H --->..
ATREWR1:
   CLR    CS
   NOP
   NOP
   LCALL  DELAY1 
   MOV    B,#58H
   LCALL  WABYTE
   MOV    R0,#HHHH ;;;4 + 4
   MOV    A,@R0
   MOV    B,A
   LCALL  WABYTE
   MOV    R0,#HHLL   ;;;;7 + 1
   MOV    A,@R0
   MOV    B,A
   LCALL  WABYTE

   MOV    B,#00H    ;;;;9  DON'T CARE BITS
   LCALL  WABYTE

   SETB   CS
   RET

;;;   MAIN PAGE MEMORY TO  BUFFER1
;;;;;input:HHLL,LLLL  ---PAGE ADDRESS    BITS
;;;;;  THE  DATA IS SAVED IN 20H --->..
MAINTOBF:
   CLR    CS
   NOP
   NOP
   LCALL  DELAY1 
   MOV    B,#53H
   LCALL  WABYTE
   
   MOV    R0,#HHHH ;;;THE FOUR RESERVED BITS AND FOUR PAGE ADDRESS LINE
   MOV    A,@R0
   MOV    B,A
   LCALL  WABYTE
   
   MOV    R0,#HHLL
   MOV    A,@R0
   MOV    B,A
   LCALL  WABYTE

   MOV    B,#00H    ;;;;9  DON'T CARE BITS
   LCALL  WABYTE

   SETB   CS
   RET
   
;;;   MAIN  PAGE  MEMORY TO  BUFFER1  COMPARE
;;;;;input:HHLL,LLLL  ---PAGE ADDRESS    BITS
;;;;; THE RESULT IS IN STATUS-BYTE.6 
MCMPBF1:
   CLR    CS
   NOP
   NOP
   LCALL  DELAY1 
   MOV    B,#60H
   LCALL  WABYTE
   
   MOV    R0,#HHLL ;;;THE FOUR RESERVED BITS AND FOUR PAGE ADDRESS LINE
   MOV    A,@R0
   MOV    B,A
   LCALL  WABYTE
   
   MOV    R0,#LLLL
   MOV    A,@R0
   MOV    B,A
   LCALL  WABYTE

   MOV    B,#00H    ;;;;9  DON'T CARE BITS
   LCALL  WABYTE

   SETB   CS
   RET

;;; MAIN PAGE  WRITE THROUGH BUFFER1
;;;;;input:   R2  ---THE NUMBER OF BYTES TO  BE  WRITTEN
;;;;;;;       R0  ---THE  DATA BUFFER ADDRESS  TO  WRITTEN
;;;;;  THE  DATA IS SAVED IN 20H --->..
MAINPGM:
   CLR    CS
   NOP
   NOP
   LCALL  DELAY1 
   MOV    B,#82H
   LCALL  WABYTE
   
   MOV    R1,#HHHH
   MOV    A,@R1
   MOV    B,A
   LCALL  WABYTE
   MOV    R1,#HHLL
   MOV    A,@R1
   MOV    B,A
   LCALL  WABYTE
   MOV    R1,#LLLL
   MOV    A,@R1
   MOV    B,A
   LCALL  WABYTE

LMAIN1:
   MOV    A,@R0
   MOV    B,A
   LCALL  WABYTE
   INC    R0 
   DJNZ   R2,LMAIN1

   SETB   CS
   RET

;;;;a low to high transition will terminate the read operation and
;;;;tri-state the SO pin 
;;--when the end of a buffer is reached ,the device will continuing
 ;;--reading  back at the beginning of the buffer

;;;;BUFFER1  READ
;;;;;input:   R2  ---THE NUMBER OF BYTES TO  BE  READ
;;;;;;;      HHLL,LLLL ---PAGE OFFSET
;;;;;  THE  DATA IS SAVED IN 20H --->..
RBUFFER1:  ;;;;;;;;;==========OK===============
   CLR    CS
   NOP
   NOP
   LCALL  DELAY1 
   MOV    B,#54H
   LCALL  WABYTE
   
   MOV    B,#00H  
   LCALL  WABYTE
   MOV    R1,#HHLL
   MOV    A,@R1
   ANL    A,#01H
   MOV    B,A      ;;;15 DON'T CARE BITS
   LCALL  WABYTE
   MOV    R1,#LLLL
   MOV    A,@R1
   MOV    B,A
   LCALL  WABYTE ;;;9BIT SPECIFY THE FIRST BYTE'S ADDRESS   
   MOV    B,#00H  ;;;8  DON'T CARE BITS
   LCALL  WABYTE

   MOV    B,#00H
   MOV    R0,#20H
LWW:
   LCALL  RABYTE
   MOV    A,B
   MOV    @R0,A
   INC    R0 
   DJNZ   R2,LWW

   SETB   CS

   RET

;;;;BUFFER2  READ
;;;;;input:   R2  ---THE NUMBER OF BYTES TO  BE  READ
;;;;;;;;;     R1  ---THE LOW 8 BITS OF PAGEADDRESS  
;;;;;  THE  DATA IS SAVED IN 20H --->..
RBUFFER2:
   CLR    CS
   LCALL  DELAY1
   MOV    B,#56H
   LCALL  WABYTE
   MOV    B,#00H
   LCALL  WABYTE
   MOV    B,#00H
   LCALL  WABYTE
   MOV    B,#00H
   LCALL  WABYTE
   MOV    B,R1
   LCALL  WABYTE
   MOV    B,#00H

   MOV    R0,#20H
LWW2:
   LCALL  RABYTE
   MOV    A,B
   MOV    @R0,A
   INC    R0 
   DJNZ   R2,LWW2

   SETB   CS
   RET

;;;--Before 0->1 on the /CS,the device continuing sending out the
;;;--status byte
;;;______________________________________________________________
;     bit7        bit6    bit5   bit4  bit3   bit2   bit1   bit0
;;    RDY,/BUSY   COMP     0      1     1      X      X      X
;;;--------------------------------------------------------------
;;;;  READ  STATUS
;;;;;input:   
;;;;;;;;;     
;;;;;  THE  BYTE STATUS DATA  IS SAVED IN 20H ,21H
RSTATUS:           ;;;=============OK============
   CLR    CS
   LCALL  DELAY1
   MOV    B,#57H
   LCALL  WABYTE

   MOV    R2,#08H
   MOV    R0,#20H
LWWS:
   LCALL  RABYTE
   MOV    A,B
   MOV    @R0,A
   INC    R0 
   DJNZ   R2,LWWS

   SETB   CS
   RET

;;;;WRITE  BUFFER1
;;;--the data is entered follow the address bits,
;;;--if the end of the data buffer is reached,the device will wrap around back
;;;--to the beginning of the buffer .
;;;--Data will continue to be loaded into the buffer until a low to high
;;;--transtion is detected on the /CS pin .

;;;;;input:   R2  ---THE NUMBER OF BYTES 
;;;;;;;;;     R1  ---THE LOW 8 BITS OF PAGE ADDRESS
;;;;;;;;;     R0  ---THE DATA BUFFER TO WRITE
;;;;; 
WBUFFER1:   ;;;;===============OK===============
   CLR    CS
   LCALL  DELAY1
   MOV    B,#84H
   LCALL  WABYTE
   
   MOV    B,#00H
   LCALL  WABYTE
   MOV    B,#00H    ;;;;;THE 9TH  BIT  IS IN  THIS BYTE
   LCALL  WABYTE

   MOV    B,R1      ;;;PAGE ADDRESS
   LCALL  WABYTE    ;;;
LWWM:
   MOV    A,@R0     ;;;DATA BUFFER
   MOV    B,A
   LCALL  WABYTE
   INC    R0 
   DJNZ   R2,LWWM

   SETB   CS
   RET
   
;;;;;input:   R2  ---THE NUMBER OF BYTES 
;;;;;;;;;     R0  ---THE DATA BUFFER TO WRITE
;;;;; 
WBUF1:   ;;;;===============OK===============
   CLR    CS
   LCALL  DELAY1
   MOV    B,#84H
   LCALL  WABYTE
   
   MOV    B,#00H
   LCALL  WABYTE
   
   MOV    R1,#HHLL
   MOV    A,@R1
   ANL    A,#01H
   MOV    B,A    ;;;;;THE 9TH  BIT  IS IN  THIS BYTE
   LCALL  WABYTE
   
   MOV    R1,#LLLL
   MOV    A,@R1
   MOV    B,A       ;;;BUFFER1 OFFSET
   LCALL  WABYTE    ;;;
LWBF1:
   MOV    A,@R0     ;;;DATA BUFFER
   MOV    B,A
   LCALL  WABYTE
   INC    R0 
   DJNZ   R2,LWBF1

   SETB   CS
   RET


;;;; CHECK IF THE DATA IS CORRECT
;;;; INPUT : R0 --THE DATA BUFFER BEGIN ADDRESS

CHKSUM:
       MOV  A,@R0
       DEC  A
       MOV  R2,A
       MOV  B,#00H
LLCHK:
       INC  R0
       MOV  A,@R0
       ADD  A,B
       MOV  B,A
       DJNZ R2,LLCHK
       INC  R0
       MOV  A,@R0
       CJNE A,B,ERRSUM
       CLR  C
       JMP  OUTSUM
ERRSUM:
    SETB  C
OUTSUM:
 
  RET


RABYTE:
   MOV    A,R2
   PUSH   ACC

   MOV    R2,#8
   MOV    A,#0FFH
   MOV    B,A
LPREAD:
   CLR    SCLK
   NOP
   LCALL  DELAY
   NOP
   SETB   SCLK
   LCALL  DELAY1
   MOV    C,SO    ;;;THE  OUTPUT PIN  OF AT45D041.......
   MOV    A,B
   RLC    A
   MOV    B,A 
   LCALL  DELAY2
   NOP
   DJNZ   R2,LPREAD
   NOP
   SETB  SCLK
   POP  ACC
   MOV   R2,A
  RET

;;;;;;;;;write a byte
;;;;;;;INPUT: THE BYTE TO BE WRITEEN IS IN  "B"
WABYTE:
   MOV    A,R2
   PUSH   ACC

   MOV    R2,#8
LPWR:
   CLR    SCLK
   NOP
   LCALL  DELAY1
   MOV    A,B
   RLC    A
   MOV    B,A
   MOV    SI,C     ;;;SI  THE INPUT PIN  OF  AT45D041
   LCALL  DELAY2
   NOP
   SETB   SCLK
   LCALL  DELAY
   NOP
   DJNZ   R2,LPWR
   NOP
   SETB  SCLK
   POP  ACC
   MOV   R2,A
  RET

DELAY1:
     MOV  R7,#01H
DD11:MOV  R6,#1FH
DD22:DJNZ R6,DD22
     DJNZ R7,DD11
     RET

DELAY2:
      MOV  R7,#01H
AA11: MOV  R6,#1FH
AA22: DJNZ R6,AA22
      DJNZ R7,AA11
    RET

DELAY:
       MOV  R7,#02H
CC11:  MOV  R6,#1FH    ;;;;5
CC22:  DJNZ R6,CC22
       DJNZ R7,CC11
    RET
             END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -