📄 45d041.asm
字号:
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 + -