📄 at45db.asm
字号:
$INCLUDE (t89c51cc01.INC)
AT_SCK EQU P0.5
AT_SI EQU P0.6
AT_CS EQU P3.3
AT_SO EQU P3.7
ORG 0030H
AJMP MAIN
ORG 0100H
MAIN: MOV P0,#0FFH
MOV P3,#0FFH
MOV R3,#00H ;主存页地址和页内地址(4空位+11位页址+9位页内址)
MOV R4,#00H
MOV R5,#00H ;R5为地址最高字节
MOV 30H,#50H ;暂存8个字节数据
MOV 31H,#51H
MOV 32H,#52H
MOV 33H,#53H
MOV 34H,#54H
MOV 35H,#55H
MOV 36H,#56H
MOV 37H,#57H
LCALL WRITAT
;LCALL MEM2BUF
;LCALL MBCMP
;LCALL WRBUF
;LCALL BUF2MB
LCALL DELAY1S
;LCALL RDBUF
LCALL READAT
;LCALL RDSTA
MOV P2,46H
CLR P0.0 ;
CLR P0.1 ;
JMP $
RDSTA: CLR AT_CS ;读状态寄存器
MOV A,#57H
LCALL WRAT45
LCALL RDAT45
SETB AT_CS
RET
MBCMP: CLR AT_CS ;主存与缓冲区比较
CLR AT_SCK
MOV A,#60H
LCALL WRAT45
MOV A,#00H
LCALL WRAT45
MOV A,#00H
LCALL WRAT45
MOV A,#00H
LCALL WRAT45
SETB AT_CS
SETB AT_SCK
RET
WRBUF: CLR AT_CS ;写缓冲区1/2
CLR AT_SCK
MOV A,#84H ;84H(87H)+15空位+9位地址
LCALL WRAT45
MOV A,#00H
LCALL WRAT45
MOV A,#00H
LCALL WRAT45
MOV A,#00H
LCALL WRAT45
MOV R0,#30H ;待写的数据存放在30H-37H内存单元中
MOV R1,#08H
WRBUF1: MOV A,@R0
LCALL WRAT45
INC R0
DJNZ R1,WRBUF1
SETB AT_CS
SETB AT_SCK
RET
RDBUF: CLR AT_CS ;读缓冲区1/2
CLR AT_SCK
MOV A,#54H ;54H(56H)+15空位+9位地址+8空位
LCALL WRAT45
MOV A,#00H
LCALL WRAT45
MOV A,#00H ;缓冲区页内地址高字节
LCALL WRAT45
MOV A,#00H ;
LCALL WRAT45
MOV A,#00H
LCALL WRAT45
MOV R0,#40H ;读出的数据暂存在40H-47H内存单元中
MOV R1,#08H
RDBUF1: LCALL RDAT45
MOV @R0,A
INC R0
DJNZ R1,RDBUF1
SETB AT_CS
SETB AT_SCK
RET
BUF2MB: CLR AT_CS ;缓冲区1/2拷贝至主存页
CLR AT_SCK
MOV A,#83H ;
LCALL WRAT45
MOV A,#00H
LCALL WRAT45
MOV A,#00H
LCALL WRAT45
MOV A,#00H
LCALL WRAT45
SETB AT_CS
SETB AT_SCK
RET
MEM2BUF:CLR AT_CS ;主存页拷贝至缓冲区1/2
CLR AT_SCK
MOV A,#53H
LCALL WRAT45
MOV A,#00H
LCALL WRAT45
MOV A,#00H
LCALL WRAT45
MOV A,#00H
LCALL WRAT45
MOV A,#00H
LCALL WRAT45
SETB AT_CS
SETB AT_SCK
RET
WRITAT: CLR AT_CS ;主存通过缓冲区1/2页编程
CLR AT_SCK
MOV A,#82H ;82H(85H)+4空位+11位页址+9位页内址
LCALL WRAT45
MOV A,R5 ;写入地址
LCALL WRAT45
MOV A,R4
LCALL WRAT45
MOV A,R3
LCALL WRAT45
MOV R0,#30H ;待写的数据存放在30H-37H内存单元中
MOV R1,#08H
WRITAT1:MOV A,@R0
LCALL WRAT45
INC R0
DJNZ R1,WRITAT1
SETB AT_CS
SETB AT_SCK
RET
READAT: CLR AT_CS ;主存读
CLR AT_SCK
MOV A,#52H ;52H+4个空位+11位页地址+9位页内部地址+32个空位
LCALL WRAT45
MOV A,R5 ;写入地址
LCALL WRAT45
MOV A,R4
LCALL WRAT45
MOV A,R3
LCALL WRAT45
MOV A,#00H ;写入32位无关项
LCALL WRAT45
MOV A,#00H
LCALL WRAT45
MOV A,#00H
LCALL WRAT45
MOV A,#00H
LCALL WRAT45
MOV R0,#40H ;读出的数据暂存在40H-47H内存单元中
MOV R1,#08H
READAT1:LCALL RDAT45
MOV @R0,A
INC R0
DJNZ R1,READAT1
SETB AT_CS
SETB AT_SCK
RET
WRAT45: MOV R2,#08H ;字节数据写子程序
WRAT451:CLR AT_SCK
RLC A
MOV AT_SI,C
SETB AT_SCK
DJNZ R2,WRAT451
RET
RDAT45: MOV R2,#08H ;字节数据读子程序
RDAT451:CLR AT_SCK
NOP
SETB AT_SCK ;
MOV C,AT_SO
RLC A
SETB AT_SCK
DJNZ R2,RDAT451
RET
DELAY1S:
MOV R1,#02H
delay01:MOV R6,#0FFH
delay02:MOV R2,#0FFH
DJNZ R2,$
DJNZ R6,DELAY02
DJNZ R1,DELAY01
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -