?? spidemo.asm
字號:
;/*------------------------------------------------------------------*/
;/* --- STC MCU International Limited -------------------------------*/
;/* --- STC 1T Series MCU SPI Demo(1 master and 1 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 */
;/*------------------------------------------------------------------*/
//#define MASTER //define:master undefine:slave
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 slave' SS(P1.4) pin
;//////////////////////////////////////////////////////////
ORG 0000H
LJMP RESET
ORG 0100H
RESET:
LCALL INIT_UART ;initial UART
LCALL INIT_SPI ;initial SPI
MAIN:
#ifdef MASTER //for master (receive UART data from PC and send it to slave, in the meantime
LCALL RECV_UART ; receive SPI data from slave and send it to PC)
LCALL SPI_SWAP
LCALL SEND_UART
#else //for salve (receive SPI data from master and
LCALL SPI_SWAP ; send previous SPI data to master)
#endif
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
#ifdef MASTER
MOV SPCTL,#SPEN | MSTR ;master mode
#else
MOV SPCTL,#SPEN ;slave mode
#endif
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:
#ifdef MASTER
CLR SPISS ;pull low slave SS
#endif
MOV SPDAT,A ;trigger SPI send
WAIT:
MOV A,SPSTAT
JNB ACC.7,WAIT ;wait send complete
MOV SPSTAT,#SPIF | WCOL ;clear SPI status
#ifdef MASTER
SETB SPISS ;push high slave SS
#endif
MOV A,SPDAT ;return received SPI data
RET
;//////////////////////////////////////////////////////////
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -