📄 www.ourhc.cn.lst
字号:
C51 COMPILER V8.05a WWW_OURHC_CN 06/03/2012 21:59:45 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 other MCU's 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:59:45 PAGE 2
56 {
57 1 InitUart(); //initial UART
58 1 InitSPI(); //initial SPI
59 1
60 1 while (1)
61 1 {
62 2 if (RI)
63 2 {
64 3 SPCTL = SPEN | MSTR; //set as master
65 3 SendUart(SPISwap(RecvUart()));
66 3 SPCTL = SPEN; //reset as slave
67 3 }
68 2 if (SPSTAT & SPIF)
69 2 {
70 3 SPSTAT = SPIF | WCOL; //clear SPI status
71 3 SPDAT = SPDAT; //mov data from receive buffer to send buffer
72 3 }
73 2 }
74 1 }
75
76 ///////////////////////////////////////////////////////////
77
78 void InitUart()
79 {
80 1 SCON = 0x5a; //set UART mode as 8-bit variable baudrate
81 1 TMOD = 0x20; //timer1 as 8-bit auto reload mode
82 1 AUXR = 0x40; //timer1 work at 1T mode
83 1 TH1 = TL1 = BAUD; //115200 bps
84 1 TR1 = 1;
85 1 }
86
87 ///////////////////////////////////////////////////////////
88
89 void InitSPI()
90 {
91 1 SPDAT = 0; //initial SPI data
92 1 SPSTAT = SPIF | WCOL; //clear SPI status
93 1 SPCTL = SPEN; //slave mode
94 1 }
95
96 ///////////////////////////////////////////////////////////
97
98 void SendUart(BYTE dat)
99 {
100 1 while (!TI); //wait pre-data sent
101 1 TI = 0; //clear TI flag
102 1 SBUF = dat; //send current data
103 1 }
104
105 ///////////////////////////////////////////////////////////
106
107 BYTE RecvUart()
108 {
109 1 while (!RI); //wait receive complete
110 1 RI = 0; //clear RI flag
111 1 return SBUF; //return receive data
112 1 }
113
114 ///////////////////////////////////////////////////////////
115
116 BYTE SPISwap(BYTE dat)
117 {
C51 COMPILER V8.05a WWW_OURHC_CN 06/03/2012 21:59:45 PAGE 3
118 1 SPISS = 0; //pull low slave SS
119 1 SPDAT = dat; //trigger SPI send
120 1 while (!(SPSTAT & SPIF)); //wait send complete
121 1 SPSTAT = SPIF | WCOL; //clear SPI status
122 1 SPISS = 1; //push high slave SS
123 1 return SPDAT; //return received SPI data
124 1 }
125
126 /********************************************************************
127 结束
128 *********************************************************************/
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 + -