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

📄 spidemo.asm

📁 STC-MCU-SPI演示(源代码)
💻 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 + -