⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 51_25045.asm

📁 x25045的编程应用(51汇编格式)
💻 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 + -