📄 www.ourhc.cn.lst
字号:
C51 COMPILER V8.05a WWW_OURHC_CN 06/03/2012 21:40:47 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE WWW_OURHC_CN
OBJECT MODULE PLACED IN www.ourhc.cn.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE www.ourhc.cn.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************
2 汇诚科技
3
4 实现功能:STC12C5A60S2单片机之串口通信单主单从
5 使用芯片:STC12C5A60S2
6 晶振:11.0592MHZ
7 波特率:115200
8 编译环境:Keil
9 作者:zhangxinchun
10 网站:www.ourhc.cn
11 淘宝店:
12 汇诚科技 http://ourhc.taobao.com
13 郑兴电子直销部 http://shop68451856.taobao.com
14 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
15
16
17 *********************************************************************/
18 #include "REG52.H"
19 #include "INTRINS.H"
20
21 #define FOSC 18432000L
22 #define BAUD (256 - FOSC / 32 / 115200)
23
24 typedef unsigned char BYTE;
25 typedef unsigned int WORD;
26 typedef unsigned long DWORD;
27
28 sfr AUXR = 0x8e; //Auxiliary register
29
30 sfr SPSTAT = 0xcd; //SPI status register
31 #define SPIF 0x80 //SPSTAT.7
32 #define WCOL 0x40 //SPSTAT.6
33 sfr SPCTL = 0xce; //SPI control register
34 #define SSIG 0x80 //SPCTL.7
35 #define SPEN 0x40 //SPCTL.6
36 #define DORD 0x20 //SPCTL.5
37 #define MSTR 0x10 //SPCTL.4
38 #define CPOL 0x08 //SPCTL.3
39 #define CPHA 0x04 //SPCTL.2
40 #define SPDHH 0x00 //CPU_CLK/4
41 #define SPDH 0x01 //CPU_CLK/16
42 #define SPDL 0x02 //CPU_CLK/64
43 #define SPDLL 0x03 //CPU_CLK/128
44 sfr SPDAT = 0xcf; //SPI data register
45 sbit SPISS = P1^3; //SPI slave select, connect to slave' SS(P1.4) pin
46
47 void InitUart();
48 void InitSPI();
49 void SendUart(BYTE dat); //send data to PC
50 BYTE RecvUart(); //receive data from PC
51 BYTE SPISwap(BYTE dat); //swap SPI data between master and slave
52
53 ///////////////////////////////////////////////////////////
54
55 void main()
C51 COMPILER V8.05a WWW_OURHC_CN 06/03/2012 21:40:47 PAGE 2
56 {
57 1 InitUart(); //initial UART
58 1 InitSPI(); //initial SPI
59 1
60 1 while (1)
61 1 {
62 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
66 2 ACC = SPISwap(ACC); // send previous SPI data to master)
67 2 #endif
68 2 }
69 1 }
70
71 ///////////////////////////////////////////////////////////
72
73 void InitUart()
74 {
75 1 SCON = 0x5a; //set UART mode as 8-bit variable baudrate
76 1 TMOD = 0x20; //timer1 as 8-bit auto reload mode
77 1 AUXR = 0x40; //timer1 work at 1T mode
78 1 TH1 = TL1 = BAUD; //115200 bps
79 1 TR1 = 1;
80 1 }
81
82 ///////////////////////////////////////////////////////////
83
84 void InitSPI()
85 {
86 1 SPDAT = 0; //initial SPI data
87 1 SPSTAT = SPIF | WCOL; //clear SPI status
88 1 #ifdef MASTER
SPCTL = SPEN | MSTR; //master mode
#else
91 1 SPCTL = SPEN; //slave mode
92 1 #endif
93 1 }
94
95 ///////////////////////////////////////////////////////////
96
97 void SendUart(BYTE dat)
98 {
99 1 while (!TI); //wait pre-data sent
100 1 TI = 0; //clear TI flag
101 1 SBUF = dat; //send current data
102 1 }
103
104 ///////////////////////////////////////////////////////////
105
106 BYTE RecvUart()
107 {
108 1 while (!RI); //wait receive complete
109 1 RI = 0; //clear RI flag
110 1 return SBUF; //return receive data
111 1 }
112
113 ///////////////////////////////////////////////////////////
114
115 BYTE SPISwap(BYTE dat)
116 {
C51 COMPILER V8.05a WWW_OURHC_CN 06/03/2012 21:40:47 PAGE 3
117 1 #ifdef MASTER
SPISS = 0; //pull low slave SS
#endif
120 1 SPDAT = dat; //trigger SPI send
121 1 while (!(SPSTAT & SPIF)); //wait send complete
122 1 SPSTAT = SPIF | WCOL; //clear SPI status
123 1 #ifdef MASTER
SPISS = 1; //push high slave SS
#endif
126 1 return SPDAT; //return received SPI data
127 1 }
128
129 /********************************************************************
130 结束
131 *********************************************************************/
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 + -