📄 spidemo.lst
字号:
C51 COMPILER V8.02 SPIDEMO 08/04/2010 09:12:17 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE SPIDEMO
OBJECT MODULE PLACED IN SPIDemo.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SPIDemo.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*------------------------------------------------------------------*/
2 /* --- STC MCU International Limited -------------------------------*/
3 /* --- STC 1T Series MCU SPI Demo(1 master and 1 slave) ------------*/
4 /* --- Mobile: (86)13922805190 -------------------------------------*/
5 /* --- Fax: 86-755-82944243 ----------------------------------------*/
6 /* --- Tel: 86-755-82948412 ----------------------------------------*/
7 /* --- Web: www.STCMCU.com -----------------------------------------*/
8 /* If you want to use the program or the program referenced in the */
9 /* article, please specify in which data and procedures from STC */
10 /*------------------------------------------------------------------*/
11
12 #include "reg51.h"
13
14 //#define MASTER //define:master undefine:slave
15 #define FOSC 18432000L
16 #define BAUD (256 - FOSC / 32 / 115200)
17
18 typedef unsigned char BYTE;
19 typedef unsigned int WORD;
20 typedef unsigned long DWORD;
21
22 sfr AUXR = 0x8e; //Auxiliary register
23
24 sfr SPSTAT = 0xcd; //SPI status register
25 #define SPIF 0x80 //SPSTAT.7
26 #define WCOL 0x40 //SPSTAT.6
27 sfr SPCTL = 0xce; //SPI control register
28 #define SSIG 0x80 //SPCTL.7
29 #define SPEN 0x40 //SPCTL.6
30 #define DORD 0x20 //SPCTL.5
31 #define MSTR 0x10 //SPCTL.4
32 #define CPOL 0x08 //SPCTL.3
33 #define CPHA 0x04 //SPCTL.2
34 #define SPDHH 0x00 //CPU_CLK/4
35 #define SPDH 0x01 //CPU_CLK/16
36 #define SPDL 0x02 //CPU_CLK/64
37 #define SPDLL 0x03 //CPU_CLK/128
38 sfr SPDAT = 0xcf; //SPI data register
39 sbit SPISS = P1^3; //SPI slave select, connect to slave' SS(P1.4) pin
40
41 void InitUart();
42 void InitSPI();
43 void SendUart(BYTE dat); //send data to PC
44 BYTE RecvUart(); //receive data from PC
45 BYTE SPISwap(BYTE dat); //swap SPI data between master and slave
46
47 ///////////////////////////////////////////////////////////
48
49 void main()
50 {
51 1 InitUart(); //initial UART
52 1 InitSPI(); //initial SPI
53 1
54 1 while (1)
55 1 {
C51 COMPILER V8.02 SPIDEMO 08/04/2010 09:12:17 PAGE 2
56 2 #ifdef MASTER //for master (receive UART data from PC and send it to slave, in the meant
-ime
// receive SPI data from slave and send it to PC)
SendUart(SPISwap(RecvUart()));
#else //for salve (receive SPI data from master and
60 2 ACC = SPISwap(ACC); // send previous SPI data to master)
61 2 #endif
62 2 }
63 1 }
64
65 ///////////////////////////////////////////////////////////
66
67 void InitUart()
68 {
69 1 SCON = 0x5a; //set UART mode as 8-bit variable baudrate
70 1 TMOD = 0x20; //timer1 as 8-bit auto reload mode
71 1 AUXR = 0x40; //timer1 work at 1T mode
72 1 TH1 = TL1 = BAUD; //115200 bps
73 1 TR1 = 1;
74 1 }
75
76 ///////////////////////////////////////////////////////////
77
78 void InitSPI()
79 {
80 1 SPDAT = 0; //initial SPI data
81 1 SPSTAT = SPIF | WCOL; //clear SPI status
82 1 #ifdef MASTER
SPCTL = SPEN | MSTR; //master mode
#else
85 1 SPCTL = SPEN; //slave mode
86 1 #endif
87 1 }
88
89 ///////////////////////////////////////////////////////////
90
91 void SendUart(BYTE dat)
92 {
93 1 while (!TI); //wait pre-data sent
94 1 TI = 0; //clear TI flag
95 1 SBUF = dat; //send current data
96 1 }
97
98 ///////////////////////////////////////////////////////////
99
100 BYTE RecvUart()
101 {
102 1 while (!RI); //wait receive complete
103 1 RI = 0; //clear RI flag
104 1 return SBUF; //return receive data
105 1 }
106
107 ///////////////////////////////////////////////////////////
108
109 BYTE SPISwap(BYTE dat)
110 {
111 1 #ifdef MASTER
SPISS = 0; //pull low slave SS
#endif
114 1 SPDAT = dat; //trigger SPI send
115 1 while (!(SPSTAT & SPIF)); //wait send complete
116 1 SPSTAT = SPIF | WCOL; //clear SPI status
C51 COMPILER V8.02 SPIDEMO 08/04/2010 09:12:17 PAGE 3
117 1 #ifdef MASTER
SPISS = 1; //push high slave SS
#endif
120 1 return SPDAT; //return received SPI data
121 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 70 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -