📄 x25045.asm
字号:
;(1)X25045数据写入程序
;功能:将缓冲区数据写入指定地址开始的单元。
;入口:F0、R3是E2PROM单元地址最高位和低八位;R0是8051缓冲区首地址;R2是缓冲区长度。
WRITEX: LCALL STAX ;指令启动
MOV A,#06H ;输出WREN
LCALL BYTE_OUT
LCALL STAX ;下一指令启动
MOV A,#02H ;输出WRITE
MOV C,F0 ;插入单元地址最高位
MOV ACC.3,C
LCALL BYTE_OUT
MOV A,R3 ;输出单元地址低八位
LCALL BYTE_OUT
BYWR: MOV A,@R0 ;从缓冲区取数输出,写入到X5045中
LCALL BYTE_OUT
INC R0 ;指针加1
DJNZ R2,BYWR ;缓冲区未空则继续输出
LCALL ENDX ;指令结束
LCALL WIP_CHK ;等待WIP=0
RET
;(2)X25045数据读出程序
;功能:把指定地址开始的单元数据读出并放入缓冲区
;入口:F0、R3是E2PROM单元地址最高位和低八位;R0是8051缓冲区首地址;R2是缓冲区长度。
READX: LCALL STAX
MOV A,#03H ;输出READ
MOV C,F0
MOV ACC.3,C
LCALL BYTE_OUT
MOV A,R3 ;输出低八位地址
LCALL BYTE_OUT
BYRD: LCALL BYTE_IN ;输入数据送入缓冲区
MOV @R0,A
INC R0 ;指针加1
DJNZ R2,BYRD ;缓冲区未满则继续输入
LCALL ENDX
RET
;(3)X25045状态寄存器写入程序
;功能:对状态寄存器进行设置。
;入口:ACC是修改值。
WRSR: LCALL STAX
PUSH ACC
MOV A,#06H ;输出WREN
LCALL BYTE_OUT
LCALL STAX
MOV A,#01H ;输出WRSR
LCALL BYTE_OUT
POP ACC ;输出设置值
LCALL BYTE_OUT
LCALL ENDX
LCALL WIP_CHK ;等待WIP=0
RET
;(4)X25045状态寄存器读出程序
;功能:读出状态寄存器当前值。
;出口:ACC是当前值。
RDSR:LCALL STAX
MOV A,#05H
LCALL BYTE_OUT
LCALL BYTE_IN
LCALL ENDX
RET
;(5)其他子程序
WIP_CHK: LCALL RDSR ;等待X25045结束内部写周期
JB ACC.0,WIP_CHK
RET
STAX: SETB CS ;启动X25045
NOP ;先拉高CS,再拉低SCK,最后拉低CS
CLR SCK
NOP
CLR CS
NOP
RET
ENDX: CLR SCK ;结束X25045指令
SETB CS ;先拉低SCK后拉高CS
NOP
NOP
RET
BYTE_OUT: MOV R4,#08H ;向X25045中写入一字节数据,R4中存放的是一字节数据的位数:8
BOUT1: CLR SCK
RLC A
MOV SI,C
SETB SCK
NOP
NOP
DJNZ R4,BOUT1
RET
BYTE_IN: MOV R4,#08H ;从X25045中读出一字节数据,R4中存放的是一字节数据的位数:8
BIN1: CLR SCK
MOV C,SO
RLC A
SETB SCK
NOP
NOP
DJNZ R4,BIN1
RET
RST_DOG:SETB CS ;复位看门狗定时器
NOP
CLR CS
NOP
SETB CS
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -