📄 spiproc.h
字号:
;===============================================
; Function:SpiSendHalf(A = SpiData) SendHalfByte()
;===============================================
SpiSendHalf:
MOV A_buff,A
MOV A,@4
MOV N1,A
SpiSendHLoop:
BC SpiPort,WR
CALL SpiDelay
JBS A_buff,3
JMP SpiSendHDat0
SpiSendHDat1:
BS SpiPort,DAT
JMP SpiSendHClk
SpiSendHDat0:
BC SpiPort,DAT
SpiSendHClk:
CALL SpiDelay
BS SpiPort,WR
CALL SpiDelay
CALL SpiDelay
SpiSendHNext:
RLC A_buff
DJZ N1
JMP SpiSendHLoop
; 最后要低下来表示数据传完!
BC SpiPort,WR
CALL SpiDelay
RET
;===============================================
; Function:SpiSendByte(A = SpiData) L->H Send
;===============================================
SpiSendByte:
MOV A_buff,A
MOV A,@8
MOV N1,A
SpiSendLoop:
BC SpiPort,WR
CALL SpiDelay
JBS A_buff,7
JMP SpiSendDat0
SpiSendDat1:
BS SpiPort,DAT
JMP SpiSendClk
SpiSendDat0:
BC SpiPort,DAT
SpiSendClk:
CALL SpiDelay
BS SpiPort,WR
CALL SpiDelay
CALL SpiDelay
SpiSendNext:
RLC A_buff
DJZ N1
JMP SpiSendLoop
BC SpiPort,WR
CALL SpiDelay
RET
;===============================================
; Function:SpiReadByte()= A
;===============================================
SpiReadByte:
IOR SpiPort
OR A,@OSPI_DAT
IOW SpiPort
; 循环 8 次
MOV A,@8
MOV N1,A
; 缓冲清除
CLR A_buff
SpiReadLoop:
; RD 由高到低
BS SpiPort,RD
CALL SpiDelay
CALL SpiDelay
BC SpiPort,RD
CALL SpiDelay
; 清进位标志
BC STATU,C
; 左移数据
RLC A_buff
; 数据是否高
JBS SpiPort,DAT
JMP SpiReadNext
; 低位置1
BS A_buff,0
SpiReadNext:
DJZ N1
JMP SpiReadLoop
; 数据置为输出
IOR SpiPort
AND A,@ASPI_DAT
IOW SpiPort
MOV A,A_buff
RET
;===============================================
; Function:SpiVSendByte(A = SpiData) 先发低位
;===============================================
SpiVSendByte:
MOV A_buff,A
MOV A,@8
MOV N1,A
SpiVSendLoop:
BC SpiPort,WR
CALL SpiDelay
JBS A_buff,0
JMP SpiVSendDat0
SpiVSendDat1:
BS SpiPort,DAT
JMP SpiVSendClk
SpiVSendDat0:
BC SpiPort,DAT
SpiVSendClk:
CALL SpiDelay
BS SpiPort,WR
CALL SpiDelay
CALL SpiDelay
SpiVSendNext:
RRC A_buff
DJZ N1
JMP SpiVSendLoop
BC SpiPort,WR
CALL SpiDelay
RET
;===============================================
; Function:SpiFmWrite(A = FmMode)
;===============================================
SpiFmWrite:
BS SpiPort,ENA
CALL SpiDelay
;(436B + A)=(0875 + A)
ADD A,@MIN_FM_LO
JBC STATU,C
JMP FmLarge
FmSmall:
CALL SpiVSendByte
MOV A,@MIN_FM_HI
ADD A,@0x40
JMP FmHiByte
FmLarge:
CALL SpiVSendByte
MOV A,@MIN_FM_HI
ADD A,@0x41
FmHiByte:
CALL SpiVSendByte
BC SpiPort,ENA
CALL SpiDelay
RET
;===============================================
; END OF SPI
;===============================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -