📄 spidemo.lst
字号:
C51 COMPILER V8.02 SPIDEMO 08/04/2010 09:13:31 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(Each other as the master-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 FOSC 18432000L
15 #define BAUD (256 - FOSC / 32 / 115200)
16
17 typedef unsigned char BYTE;
18 typedef unsigned int WORD;
19 typedef unsigned long DWORD;
20
21 sfr AUXR = 0x8e; //Auxiliary register
22
23 sfr SPSTAT = 0xcd; //SPI status register
24 #define SPIF 0x80 //SPSTAT.7
25 #define WCOL 0x40 //SPSTAT.6
26 sfr SPCTL = 0xce; //SPI control register
27 #define SSIG 0x80 //SPCTL.7
28 #define SPEN 0x40 //SPCTL.6
29 #define DORD 0x20 //SPCTL.5
30 #define MSTR 0x10 //SPCTL.4
31 #define CPOL 0x08 //SPCTL.3
32 #define CPHA 0x04 //SPCTL.2
33 #define SPDHH 0x00 //CPU_CLK/4
34 #define SPDH 0x01 //CPU_CLK/16
35 #define SPDL 0x02 //CPU_CLK/64
36 #define SPDLL 0x03 //CPU_CLK/128
37 sfr SPDAT = 0xcf; //SPI data register
38 sbit SPISS = P1^3; //SPI slave select, connect to other MCU's SS(P1.4) pin
39
40 void InitUart();
41 void InitSPI();
42 void SendUart(BYTE dat); //send data to PC
43 BYTE RecvUart(); //receive data from PC
44 BYTE SPISwap(BYTE dat); //swap SPI data between master and slave
45
46 ///////////////////////////////////////////////////////////
47
48 void main()
49 {
50 1 InitUart(); //initial UART
51 1 InitSPI(); //initial SPI
52 1
53 1 while (1)
54 1 {
55 2 if (RI)
C51 COMPILER V8.02 SPIDEMO 08/04/2010 09:13:31 PAGE 2
56 2 {
57 3 SPCTL = SPEN | MSTR; //set as master
58 3 SendUart(SPISwap(RecvUart()));
59 3 SPCTL = SPEN; //reset as slave
60 3 }
61 2 if (SPSTAT & SPIF)
62 2 {
63 3 SPSTAT = SPIF | WCOL; //clear SPI status
64 3 SPDAT = SPDAT; //mov data from receive buffer to send buffer
65 3 }
66 2 }
67 1 }
68
69 ///////////////////////////////////////////////////////////
70
71 void InitUart()
72 {
73 1 SCON = 0x5a; //set UART mode as 8-bit variable baudrate
74 1 TMOD = 0x20; //timer1 as 8-bit auto reload mode
75 1 AUXR = 0x40; //timer1 work at 1T mode
76 1 TH1 = TL1 = BAUD; //115200 bps
77 1 TR1 = 1;
78 1 }
79
80 ///////////////////////////////////////////////////////////
81
82 void InitSPI()
83 {
84 1 SPDAT = 0; //initial SPI data
85 1 SPSTAT = SPIF | WCOL; //clear SPI status
86 1 SPCTL = SPEN; //slave mode
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 SPISS = 0; //pull low slave SS
112 1 SPDAT = dat; //trigger SPI send
113 1 while (!(SPSTAT & SPIF)); //wait send complete
114 1 SPSTAT = SPIF | WCOL; //clear SPI status
115 1 SPISS = 1; //push high slave SS
116 1 return SPDAT; //return received SPI data
117 1 }
C51 COMPILER V8.02 SPIDEMO 08/04/2010 09:13:31 PAGE 3
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 98 ----
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 + -