?? 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 + -