📄 sd001spi模式.asm
字号:
MOV READ_COUNT1,#128
MOV READ_COUNT11,#128
MOV READ_COUNT2,#4
MOV READ_COUNT22,#4
MOV READ_COUNT3,#6
MOV READ_COUNT33,#6
MOV READ_ADD1,#00H
MOV READ_ADD2,#00H
READ_MUL_BLOCK_DATA:
CLR CS
MOV DPL,READ_ADD1
MOV DPH,READ_ADD2
READ_MUL_BLOCK_DATA_1:
MOV SPI0DAT,#0FFH
READ_MUL_BLOCK_DATA_1_1:
JB TXBSY,READ_MUL_BLOCK_DATA_1_1
MOV A,SPI0DAT
JB ACC.0,READ_MUL_BLOCK_DATA_1
READ_MUL_BLOCK_DATA_2:
MOV SPI0DAT,#0FFH
READ_MUL_BLOCK_DATA_2_1:
JB TXBSY,READ_MUL_BLOCK_DATA_2_1
MOV A,SPI0DAT
MOVX @DPTR,A
INC DPTR
DJNZ READ_COUNT1,READ_MUL_BLOCK_DATA_2
MOV READ_COUNT1,READ_COUNT11
DJNZ READ_COUNT2,READ_MUL_BLOCK_DATA_2
MOV READ_COUNT2,READ_COUNT22
READ_MUL_BLOCK_DATA_3:
MOV SPI0DAT,#0FFH
READ_MUL_BLOCK_DATA_3_1:
JB TXBSY,READ_MUL_BLOCK_DATA_3_1
MOV SPI0DAT,#0FFH
READ_MUL_BLOCK_DATA_3_2:
JB TXBSY,READ_MUL_BLOCK_DATA_3_2
DJNZ READ_COUNT3,READ_MUL_BLOCK_DATA_1
MOV READ_COUNT3,READ_COUNT33
LCALL SEND_CMD12
RET
;-----------------------------------------------------
;---------------停止多数据块读操作----------------------
SEND_CMD12:
MOV CMD_BUFF1,#4CH
MOV CMD_BUFF2,#00H
MOV CMD_BUFF3,#00H
MOV CMD_BUFF4,#00H
MOV CMD_BUFF5,#00H
MOV CMD_BUFF6,#0FFH
SEND_CMD12_1:
LCALL CMD_ENTRY
SEND_CMD12_2:
MOV SPI0DAT,#0FFH
SEND_CMD12_3: ;应答为R1B
JB TXBSY,SEND_CMD12_3
MOV A,SPI0DAT
JZ SEND_CMD12_2
MOV A,ACK_BUFF
CJNE A,#00H,SEND_CMD12_1
RET
;-----------------------------------------------------
READ_DATA:
CLR CS
MOV DPL,READ_ADD1
MOV DPH,READ_ADD2
READ_DATA_1:
MOV SPI0DAT,#0FFH
READ_DATA_1_1:
JB TXBSY,READ_DATA_1_1
MOV A,SPI0DAT
JB ACC.0,READ_DATA_1
READ_DATA_2:
MOV SPI0DAT,#0FFH
READ_DATA_2_1:
JB TXBSY,READ_DATA_2_1
MOV A,SPI0DAT
MOVX @DPTR,A
INC DPTR
DJNZ READ_COUNT1,READ_DATA_2
MOV READ_COUNT1,READ_COUNT11
DJNZ READ_COUNT2,READ_DATA_2
MOV READ_COUNT2,READ_COUNT22
READ_DATA_3:
MOV SPI0DAT,#0FFH
READ_DATA_3_1:
JB TXBSY,READ_DATA_3_1
MOV SPI0DAT,#0FFH
READ_DATA_3_2:
JB TXBSY,READ_DATA_3_2
SETB CS
MOV SPI0DAT,#0FFH
READ_DATA_4:
JB TXBSY,READ_DATA_4
MOV SPI0DAT,#0FFH
READ_DATA_4_1:
JB TXBSY,READ_DATA_4_1
RET
;------------------------------------------------
;-------------写一个块长度数据------------------
WRITE_BLOCK:
;--------------送CMD16设置写数据块长度---------------
MOV CMD_BUFF1,#50H
MOV CMD_BUFF2,#00H
MOV CMD_BUFF3,#00H
MOV CMD_BUFF4,#02H
MOV CMD_BUFF5,#00H
MOV CMD_BUFF6,#0FFH
WRITE_BLOCK_1:
LCALL CMD_ENTRY
SETB CS
MOV SPI0DAT,#0FFH
WRITE_BLOCK_1_1:
JB TXBSY,WRITE_BLOCK_1_1
MOV A,ACK_BUFF
CJNE A,#00H,WRITE_BLOCK_1
;------------发送单块写指令CMD24---------------
MOV CMD_BUFF1,#58H
MOV CMD_BUFF2,#00H
MOV CMD_BUFF3,#1EH
MOV CMD_BUFF4,#0B0H
MOV CMD_BUFF5,#00H
MOV CMD_BUFF6,#0FFH ; ????
WRITE_BLOCK_2:
LCALL CMD_ENTRY
MOV SPI0DAT,#0FFH
WRITE_BLOCK_2_1:
JB TXBSY,WRITE_BLOCK_2_1
MOV A,ACK_BUFF
CJNE A,#00H,WRITE_BLOCK_2
;----------------
MOV WRITE_COUNT1,#128
MOV WRITE_COUNT2,#4
MOV WRITE_DATA1,#0
MOV ROT_COUNT,#16
MOV SPI0DAT,#0FFH
WRITE_BLOCK_2_2:
JB TXBSY,WRITE_BLOCK_2_2
LCALL WRITE_DATA
RET
;--------------------------------
WRITE_DATA:
MOV SPI0DAT,#0FEH
WRITE_DATA_1:
JB TXBSY,WRITE_DATA_1
WRITE_DATA_2:
MOV SPI0DAT,WRITE_DATA1
INC WRITE_DATA1
WRITE_DATA_2_1:
JB TXBSY,WRITE_DATA_2_1
;read data from ram in MCU.
DJNZ WRITE_COUNT1,WRITE_DATA_2;jmp
MOV WRITE_COUNT1,#128
DJNZ WRITE_COUNT2,WRITE_DATA_2;jmp
MOV WRITE_COUNT2,#4
;WRITE_DATA_2jmp:
;ljmp WRITE_DATA_2
MOV SPI0DAT,#0FFH
WRITE_DATA_3:
JB TXBSY,WRITE_DATA_3
MOV SPI0DAT,#0FFH
WRITE_DATA_3_1:
JB TXBSY,WRITE_DATA_3_1
MOV SPI0DAT,#0FFH
WRITE_DATA_4:
JB TXBSY,WRITE_DATA_4
MOV A,SPI0DAT
MOV ACK_BUFF,A
WRITE_DATA_5:
MOV SPI0DAT,#0FFH
WRITE_DATA_5_1:
JB TXBSY,WRITE_DATA_5_1
MOV A,SPI0DAT
JZ WRITE_DATA_5
SETB CS
MOV SPI0DAT,#0FFH
WRITE_DATA_6:
JB TXBSY,WRITE_DATA_6
MOV SPI0DAT,#0FFH
WRITE_DATA_6_1:
JB TXBSY,WRITE_DATA_6_1
RET
;--------------------------------
;--------------擦除指定的数据------------------
EREASE_BLOCK:
;---------------设定擦除数据首地址----------------
MOV CMD_BUFF1,#60H
MOV CMD_BUFF2,#00H
MOV CMD_BUFF3,#50H
MOV CMD_BUFF4,#00H
MOV CMD_BUFF5,#00H
MOV CMD_BUFF6,#0FFH
EREASE_BLOCK_1:
LCALL CMD_ENTRY
SETB CS
MOV SPI0DAT,#0FFH
EREASE_BLOCK_1_1:
JB TXBSY,EREASE_BLOCK_1_1
MOV A,ACK_BUFF
CJNE A,#00H,EREASE_BLOCK_1
;--------------设定擦除数据末地址--------------------
MOV CMD_BUFF1,#61H
MOV CMD_BUFF2,#00H
MOV CMD_BUFF3,#0F0H
MOV CMD_BUFF4,#00H
MOV CMD_BUFF5,#00H
MOV CMD_BUFF6,#0FFH
EREASE_BLOCK_2:
LCALL CMD_ENTRY
SETB CS
MOV SPI0DAT,#0FFH
EREASE_BLOCK_2_1:
JB TXBSY,EREASE_BLOCK_2_1
MOV A,ACK_BUFF
CJNE A,#00H,EREASE_BLOCK_2
;--------------发送擦除数据命令---------------------
MOV CMD_BUFF1,#66H
MOV CMD_BUFF2,#00H
MOV CMD_BUFF3,#00H
MOV CMD_BUFF4,#00H
MOV CMD_BUFF5,#00H
MOV CMD_BUFF6,#0FFH
EREASE_BLOCK_3:
LCALL CMD_ENTRY
EREASE_BLOCK_3_0:
MOV SPI0DAT,#0FFH
EREASE_BLOCK_3_1: ;应答为R1B
JB TXBSY,EREASE_BLOCK_3_1
MOV A,SPI0DAT
JZ EREASE_BLOCK_3_0
SETB CS
MOV SPI0DAT,#0FFH
EREASE_BLOCK_3_2:
JB TXBSY,EREASE_BLOCK_3_2
MOV A,ACK_BUFF
CJNE A,#00H,EREASE_BLOCK_3
RET
;--------------------------------------------------
CMD_ENTRY:
CLR CS
NOP
NOP
MOV SPI0DAT,CMD_BUFF1
CMD_ENTRY_1:
JB TXBSY,CMD_ENTRY_1
MOV SPI0DAT,CMD_BUFF2
CMD_ENTRY_2:
JB TXBSY,CMD_ENTRY_2
MOV SPI0DAT,CMD_BUFF3
CMD_ENTRY_3:
JB TXBSY,CMD_ENTRY_3
MOV SPI0DAT,CMD_BUFF4
CMD_ENTRY_4:
JB TXBSY,CMD_ENTRY_4
MOV SPI0DAT,CMD_BUFF5
CMD_ENTRY_5:
JB TXBSY,CMD_ENTRY_5
MOV SPI0DAT,CMD_BUFF6
CMD_ENTRY_6:
JB TXBSY,CMD_ENTRY_6
MOV SPI0DAT,#0FFH
CMD_ENTRY_7:
JB TXBSY,CMD_ENTRY_7
CMD_ENTRY_8:
MOV SPI0DAT,#0FFH
CMD_ENTRY_9:
JB TXBSY,CMD_ENTRY_9
MOV A,SPI0DAT
JB ACC.7,CMD_ENTRY_8
MOV ACK_BUFF,A
MOV SPI0DAT,#0FFH
RET
;---------------------------
END1:
sjmp $ ; loop here forever
;-----------------------------------------------------------------------------
; End of file.
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -