📄 5045.asm
字号:
ORG 0000H
SHU EQU 38H ;数字存放首址
A1 EQU 37H ;数字存放开始,结束判断
A2 EQU 36H ;数字存放长度记录
A3 EQU 35H ;数字存放地址预存位
E5DZ EQU 40H ;读出5045数据的储存首址
FMQ BIT P3.7 ;蜂鸣器控制
JSD BIT P3.6 ;键盘指示灯控制
SUO BIT P3.5 ;布撤防控制
SO BIT P3.4 ;5045串行输出
SI BIT P3.2 ;5045串行输入
SCK BIT P3.1 ;5045串行时钟
CS BIT P3.0 ;5045片选
;********************************
;*****恢复出厂值**
HFCC: MOV A,#32H
CLR JSD
ACALL WRSR
MOV SP,#70H
MOV R1,#SHU
MOV @R1,#01H
INC R1
MOV @R1,#01H
INC R1
MOV @R1,#01H
INC R1
MOV @R1,#01H
INC R1
SETB JSD
ACALL XR55 ;(写入5045)
CLR SUO
ACALL D55B
CLR FMQ
JS: SJMP JS
;********读5045比较密码************
D55B: MOV R3,#08H ;5045的首址
MOV R0,#E5DZ ;读出5045的内容的储存首址
MOV R2,#04H ;储存长度
ACALL READX
RET
;**** 写入5045 ********
XR55: MOV R3,#08H ;5045的首址
MOV R0,#SHU ;读出5045的内容的储存首址
MOV R2,#04H ;储存长度
ACALL WRITEX
RET
;*************************************************************************
; 5045程序
;*************************************************************************
;(1)功能:将缓冲区数据写入指定地址开始的单元。
;入口:JHW是E2PROM单元地位低八位。
WRITEX: LCALL STAX ;指令启动
MOV A,#06H ;输入WREN
LCALL BYTE_OUT
LCALL STAX ;下一指令启动
MOV A,#02H ;输入WRITE
LCALL BYTE_OUT
MOV A,R3 ;输入单元地址低八位
LCALL BYTE_OUT
BYWR: MOV A,@R0 ;从ESJ取数输入5045
LCALL BYTE_OUT
INC R0
DJNZ R2,BYWR
LCALL ENDX ;指令结束
LCALL WIP_CHK ;等待WIP=0
RET
;(2)X25045数据读出程序
;功能:把指定地址开始的单元数据读出并放入缓冲区
;入口:与写入程序相同。
READX: LCALL STAX
MOV A,#03H ;输入READ
LCALL BYTE_OUT
MOV A,R3 ;输入低八位地址
LCALL BYTE_OUT
BYRD: LCALL BYTE_IN ;输出数据
MOV @R0,A
INC R0
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写入一字节数据
BOUT1: CLR SCK
RLC A
MOV SI,C
SETB SCK
NOP
NOP
DJNZ R4,BOUT1
RET
BYTE_IN: MOV R4, #08H ;从X25045读出一字节数据
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
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -