📄 spi.asm
字号:
/*****************************************************************
FILE NAME SPI.ASM
*****************************************************************/
$NOMOD51
NAME SPI
;MOSI BIT 90H.2
;MISO BIT 90H.3
;SCK BIT 90H.4
MOSI BIT 0B0H.5
MISO BIT 0B0H.4
SCK BIT 0B0H.2
ACC DATA 0E0H
PSW DATA 0D0H
DPL DATA 82H
DPH DATA 83H
?PR?_WBYTE?SPI SEGMENT CODE
?PR?RBYTE?SPI SEGMENT CODE
?PR?INIT?SPI SEGMENT CODE
?PR?_READ_MEM?SPI SEGMENT CODE
?PR?_WRITE_MEM?SPI SEGMENT CODE
?PR?DELAY10?SPI SEGMENT CODE
PUBLIC _WBYTE
PUBLIC RBYTE
PUBLIC INIT
PUBLIC _READ_MEM
PUBLIC _WRITE_MEM
PUBLIC DELAY10
;-------------------------------------------------------------------------
;C调用形式为:VOID WBYTE(UNSIGNED CHAR VALUE)
;VALUR放在R7中
;-------------------------------------------------------------------------
RSEG ?PR?_WBYTE?SPI
USING 0
_WBYTE:
MOV R3,#08H
MOV A,R7
CLR C
W1: RLC A
MOV MOSI,C
NOP
SETB SCK
NOP
CLR SCK
NOP
DJNZ R3,W1
RET
;-------------------------------------------------------------------------
;C调用形式为:UNSIGNED CHAR RBYTE(VOID)
;VALUR放在R7中
;-------------------------------------------------------------------------
RSEG ?PR?RBYTE?SPI
USING 0
RBYTE:
SETB MISO
MOV R3,#08H
RE1: SETB SCK
NOP
MOV C,MISO
CLR SCK
NOP
RLC A
DJNZ R3,RE1
MOV R7,A
RET
;-------------------------------------------------------------------------
;C调用形式为: VOID INIT(VOID)
;-------------------------------------------------------------------------
RSEG ?PR?INIT?SPI
USING 0
INIT:
CLR MOSI
CLR MISO
CLR SCK
RET
;-------------------------------------------------------------------------
;C调用形式为:VOID WRITE_MEM(UNSIGNED INT ADDR,UNSIGNED CHAR VALUE)
;VALUR放在R5中,ADDR IN R6,R7
;-------------------------------------------------------------------------
RSEG ?PR?_WRITE_MEM?SPI
USING 0
_WRITE_MEM:
MOV DPH,R6
MOV DPL,R7
MOV R7,#40H
LCALL _WBYTE
MOV R7,DPH
LCALL _WBYTE
MOV R7,DPL
LCALL _WBYTE
MOV R7,AR5
LCALL _WBYTE
RET
;-------------------------------------------------------------------------
;C调用形式为:UNSIGNED CHAR READ_MEM(UNSIGNED INT ADDR)
;VALUR放在R7中,ADDR IN R6,R7
;-------------------------------------------------------------------------
RSEG ?PR?_READ_MEM?SPI
USING 0
_READ_MEM:
MOV DPH,R6
MOV DPL,R7
MOV R7,#20H
LCALL _WBYTE
MOV R7,DPH
LCALL _WBYTE
MOV R7,DPL
LCALL _WBYTE
LCALL RBYTE
RET
;-------------------------------------------------------------------------
;C调用形式为:VOID DELAY10(VOID)
;1 MES DELAY
;-------------------------------------------------------------------------
RSEG ?PR?DELAY10?SPI
DELAY10:
MOV R4,#0C8H
DEL: NOP
NOP
NOP
DJNZ R4,DEL
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -