📄 spidemo.asm
字号:
;/*------------------------------------------------------------------*/
;/* --- STC MCU International Limited -------------------------------*/
;/* --- STC 1T Series MCU SPI Demo(Each other as the master-slave) --*/
;/* --- Mobile: (86)13922805190 -------------------------------------*/
;/* --- Fax: 86-755-82944243 ----------------------------------------*/
;/* --- Tel: 86-755-82948412 ----------------------------------------*/
;/* --- Web: www.STCMCU.com -----------------------------------------*/
;/* If you want to use the program or the program referenced in the */
;/* article, please specify in which data and procedures from STC */
;/*------------------------------------------------------------------*/
AUXR DATA 08EH ;Auxiliary register
SPSTAT DATA 0CDH ;SPI status register
SPIF EQU 080H ;SPSTAT.7
WCOL EQU 040H ;SPSTAT.6
SPCTL DATA 0CEH ;SPI control register
SSIG EQU 080H ;SPCTL.7
SPEN EQU 040H ;SPCTL.6
DORD EQU 020H ;SPCTL.5
MSTR EQU 010H ;SPCTL.4
CPOL EQU 008H ;SPCTL.3
CPHA EQU 004H ;SPCTL.2
SPDHH EQU 000H ;CPU_CLK/4
SPDH EQU 001H ;CPU_CLK/16
SPDL EQU 002H ;CPU_CLK/64
SPDLL EQU 003H ;CPU_CLK/128
SPDAT DATA 0CFH ;SPI data register
SPISS BIT P1.3 ;SPI slave select, connect to other MCU's SS(P1.4) pin
;//////////////////////////////////////////////////////////
ORG 0000H
LJMP RESET
ORG 0100H
RESET:
LCALL INIT_UART ;initial UART
LCALL INIT_SPI ;initial SPI
MAIN:
JB RI,MASTER_MODE
SLAVE_MODE:
MOV A,SPSTAT
JNB ACC.7,MAIN
MOV SPSTAT,#SPIF | WCOL ;clear SPI status
MOV SPDAT,SPDAT ;return received SPI data
SJMP MAIN
MASTER_MODE:
MOV SPCTL,#SPEN | MSTR; ;set as master
LCALL RECV_UART ;receive UART data from PC
LCALL SPI_SWAP ;send it to slave, in the meantime, receive SPI data from slave
LCALL SEND_UART ;send SPI data to PC
MOV SPCTL,#SPEN; ;reset as slave
SJMP MAIN
;//////////////////////////////////////////////////////////
INIT_UART:
MOV SCON,#5AH ;set UART mode as 8-bit variable baudrate
MOV TMOD,#20H ;timer1 as 8-bit auto reload mode
MOV AUXR,#40H ;timer1 work at 1T mode
MOV TL1,#0FBH ;115200 bps(256 - 18432000 / 32 / 115200)
MOV TH1,#0FBH
SETB TR1
RET
;//////////////////////////////////////////////////////////
INIT_SPI:
MOV SPDAT,#0 ;initial SPI data
MOV SPSTAT,#SPIF | WCOL ;clear SPI status
MOV SPCTL,#SPEN ;slave mode
RET
;//////////////////////////////////////////////////////////
SEND_UART:
JNB TI,$ ;wait pre-data sent
CLR TI ;clear TI flag
MOV SBUF,A ;send current data
RET
;//////////////////////////////////////////////////////////
RECV_UART:
JNB RI,$ ;wait receive complete
CLR RI ;clear RI flag
MOV A,SBUF ;return receive data
RET
RET
;//////////////////////////////////////////////////////////
SPI_SWAP:
CLR SPISS ;pull low slave SS
MOV SPDAT,A ;trigger SPI send
WAIT:
MOV A,SPSTAT
JNB ACC.7,WAIT ;wait send complete
MOV SPSTAT,#SPIF | WCOL ;clear SPI status
SETB SPISS ;push high slave SS
MOV A,SPDAT ;return received SPI data
RET
;//////////////////////////////////////////////////////////
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -