📄 51_25045.asm
字号:
;WREN_SR: 设置写使能锁存器
;WRDI_SR: 复位写使能锁存器
;WRSR_SR: 写状态寄存器
;RDSR_SR: 读状态寄存器
;WRITE8: 传送单字节
;READ8: 接收单字节
;JUDGE_NULL: WP状态标记位
_CS EQU P3.3
SO EQU P3.4
_WP EQU P3.5
SCK EQU P1.5
SI EQU P1.6
FLAG BIT 00H
WREN EQU 00000110B ;设置写使能锁存器(enable)
WRDI EQU 00000100B ;复位写使能锁存器
RDSR EQU 00000101B ;读状态寄存器
WRSR EQU 00000001B ;写状态寄存器
;**********************************************
ORG 0000H
LJMP START
ORG 0100H
START: MOV SP,#70H
LJMP MAIN
MAIN: nop
CLR P2.6
LCALL DELAY1
SETB _WP
CLR FLAG
LCALL WREN_SR
JUDGE0: LCALL JUDGE_NULL
NOP
JNB FLAG,JUDGE0
LCALL WRSR_SR
JUDGE1: LCALL JUDGE_NULL
NOP
JNB FLAG,JUDGE1
LCALL RDSR_SR
MOV R1,A ;保存读出寄存器的值
JUDGE2: LCALL JUDGE_NULL
NOP
JNB FLAG,JUDGE2
LCALL WRDI_SR ;复位使能寄存器
JUDGE3: LCALL JUDGE_NULL
NOP
JNB FLAG,JUDGE3
LCALL WRSR_SRT
JUDGE4: LCALL JUDGE_NULL
NOP
JNB FLAG,JUDGE4
LCALL RDSR_SR
SUBB A,R1 ;测试复位是否成功
JNZ $
CLR P2.7
LCALL DELAY
RE: SETB P2.6
LCALL DELAY
CLR P2.6
LCALL DELAY
LJMP RE
;*******************设置写使能锁存器*************************
WREN_SR: CLR _CS
CLR SCK
MOV A,#WREN ;06H
LCALL WRITE8
CLR SCK
SETB _CS
RET
DB 00H,00H,00H,02H,00H,00H,00H
;******************写状态寄存器*******************
WRSR_SR: CLR _CS
MOV A,#WRSR ;传送写状态指令
LCALL WRITE8
MOV A,#00111100B ;传送状态数据
LCALL WRITE8
SETB _CS
RET
;******************测试写状态寄存器****************
WRSR_SRT: NOP
CLR _CS
MOV A,#WRSR ;传送写状态指令
LCALL WRITE8
MOV A,#00110000B ;传送状态数据
LCALL WRITE8
SETB _CS
RET
;*******************复位写使能锁存器***************
WRDI_SR: NOP
CLR _CS
CLR SCK
MOV A,#WRDI
LCALL WRITE8
CLR SCK
SETB _CS
RET
;*****************读状态寄存器*********************
RDSR_SR: NOP
CLR _CS
MOV A,#RDSR ;05H
LCALL WRITE8
LCALL READ8
CLR SCK
SETB _CS
RET
;****************判25045写操作是否完成*************
JUDGE_NULL: NOP
CLR FLAG
LCALL RDSR_SR
JB ACC.0,JUDGE_NULL
SETB FLAG
RET
;******************传送单字节*********************
WRITE8: NOP
MOV R0,#08H
LOOP: nop
RLC A
MOV SI,C
CLR SCK
SETB SCK ;上升沿锁存
DJNZ R0,LOOP
RET ;SETB SCK
;*****************接收单字节*********************
READ8: CLR A
MOV R0,#08H
BLOOP: NOP
SETB SCK
CLR SCK ;下升沿锁存
MOV C,SO
RLC A
DJNZ R0,BLOOP
RET
;***************写一个字子程序***********
WRITE_BYTE: NOP
LCALL RDSR_SR
JB ACC.0,WRITE_BYTE
CLR _CS
LCALL WREN_SR
CLR _CS
MOV A,#WRITE0
LCALL WRITE8
MOV A,#10H
LCALL WRITE8
MOV A,#88H
LCALL WRITE8
MOV A,#99H
LCALL WRITE8
CLR SCK
SETB _CS
RET
WRITE0: DB 0FFH
;****************读一个字子程序*****************
READ_BYTE: nop
LCALL RDSR_SR
JB ACC.0,READ_BYTE
CLR _CS
MOV A,#READ0
LCALL WRITE8
MOV A,#10H
LCALL WRITE8
LCALL READ8
MOV R3,A
MOV A,#11H
LCALL READ8
MOV R4,A
SETB _CS
RET
READ0: DB 0FFH
;*****************250MS延时子程序************
DELAY: MOV R2,#0FAH
LOOP2: MOV R3,#0FAH
LOOP1: NOP
NOP
DJNZ R3,LOOP1
DJNZ R2,LOOP2
RET
;****************3秒延时*************
DELAY1: MOV R1,#0CH
LOOP0: NOP
LCALL DELAY
DJNZ R1,LOOP0
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -