📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 11/16/2007 15:28:25 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include "c8051F020.h"
3 #include "main.h"
4 #include "intrins.h"
5
6
7 //unsigned char SPI_rx_buff[SIZE];
8 unsigned char SPI_tx_buff[SIZE];
9 extern unsigned char ucRecData, flag = 0x00;
10 //-----------------------------------------------------------------------------
11 // MAIN Routine
12 //-----------------------------------------------------------------------------
13
14 void main (void)
15 {
16 1 unsigned int i;
17 1
18 1 //-----------------
19 1 // 初始化
20 1 WDTCN = 0xde;
21 1 WDTCN = 0xad; // 关看门狗
22 1 EA = 0;
23 1
24 1 Oscillator_Init();
25 1 Port_IO_Init();
26 1 SPI0_Init();
27 1 Timer0_Init();
28 1 UART1_Init ();
29 1 tx_buffer_Init();
30 1
31 1 EA = 1;
32 1
33 1 while (1)
34 1 {
35 2 // if (flag == 0x01)
36 2 // {
37 2 for (i=0; i<SIZE; i++)
38 2 SendSPIData(SPI_tx_buff[i]);
39 2 // }
40 2 // else
41 2 // {
42 2 // SendSPIData(SPI_tx_buff[0]);
43 2 // }
44 2 Delay1ms(1000);
45 2 }
46 1
47 1 }
48
49
50 void SendSPIData(unsigned char SPIData)
51 {
52 1 P27 = 0;
53 1 Delay1us (50);
54 1 SPI0DAT = SPIData;
55 1 while (SPIF == 0);
C51 COMPILER V7.50 MAIN 11/16/2007 15:28:25 PAGE 2
56 1 if (SPIF)
57 1 {
58 2 SPIF = 0;
59 2 }
60 1 Delay1us (50);
61 1 P27 = 1;
62 1 Delay1ms(2);
63 1 SBUF1 = SPI0DAT;
64 1 }
65
66 void tx_buffer_Init (void)
67 {
68 1 unsigned int i;
69 1 SPI_tx_buff[0] = 0x40;
70 1
71 1 for (i=1; i<SIZE; i++)
72 1 {
73 2 SPI_tx_buff[i] = i;
74 2 }
75 1
76 1 }
77
78 // This routine initializes the system clock to use an 22.1184MHz crystal as its clock source.
79 void Oscillator_Init (void)
80 {
81 1 int i; // delay counter
82 1 OSCXCN = 0x67; // start external oscillator with 22.1184MHz crystal
83 1 for (i=0; i < 3000; i++); // XTLVLD blanking interval (>1ms)
84 1 while ((OSCXCN & 0x80) == 0); // Wait for crystal osc. to settle
85 1
86 1 OSCICN = 0x88; // select external oscillator as SYSCLK source
87 1 // and enable missing clock detector
88 1 }
89
90
91 // 配置数据交叉开关和通用I/O口
92 void Port_IO_Init(void)
93 {
94 1
95 1 XBR0 = 0x07; // 允许UART0 在P0.0 (TX0)P0.1 (RX1)
96 1 // 允许SPI在P0.2 (SCK),P0.3 (MIMO),P0.4 (MOSI)P0.5 (NSS)
-
97 1 XBR1 = 0x14; // 允许/INT0在P1.2/INT1在P1.3
98 1 XBR2 = 0x44; // 交叉开关使能
99 1
100 1 P2MDOUT = 0xFF;
101 1 P0MDOUT |= 0x35; // 使能 TX0, MOSI, SCK, NSS为推挽输出
102 1 P1MDOUT = 0x01; // 使能 TX1为推挽方式
103 1 P74OUT = 0xC0; // 允许P7为推挽方式
104 1 }
105
106
107 // SPIO初始化
108 void SPI0_Init (void)
109 {
110 1 SPI0CFG = 0x07; // 空闲时为低电平,在第一个上升沿采样数据;8-bit数据传输
111 1 // SPI0CFG |= 0xC0; // 空闲时为高电平,在第二个上升沿采样数据
112 1 SPI0CN = 0x03; // 主模式; 使能SPI; 清中断标志
113 1 SPI0CKR = SYSCLK/2/SPICLK-1; // SPI时钟 <= 8MHz (limited by EEPROM spec.)
114 1 EIE1 = 0x01; // 开SPI中断
115 1 EIP1 = 0x01; // SPI中断设高优先级
116 1
C51 COMPILER V7.50 MAIN 11/16/2007 15:28:25 PAGE 3
117 1 }
118 // Timer0初始化
119 void Timer0_Init (void)
120 {
121 1
122 1 CKCON |= 0x78; // 使用系统时钟SYSCLK为时钟
123 1 TMOD |= 0x01; // 16Bit Timer
124 1 TR0 = 0; // STOP Timer0
125 1 TH0 = (0x00-SYSCLK/1000) >> 8; // set Timer0 to overflow in 1ms
126 1 TL0 = (0x00-SYSCLK/1000);
127 1 TR0 = 1; // START Timer0
128 1 ET0 = 1; // 开定时器0中断
129 1
130 1 }
131
132 // UART1初始化
133 // 设置UART1, 用定时器1为波特率发生器
134 // 波特率为9600,用于PC通信
135 void UART1_Init (void)
136 {
137 1 CKCON |= 0x10; // 选用SYSCLK作为分频时钟
138 1 TMOD |= 0x20; // T1自动重载方式
139 1 PCON |= 0x10; // SMOD1 = 1,波特率加倍
140 1
141 1 SCON1 = 0x50; // SCON1: 模式1, 8位UART, 允许RX
142 1 TH1 = -(SYSCLK/BAUDRATE1/16); // 按波特率设置定时器1重装值
143 1 TL1 = -(SYSCLK/BAUDRATE1/16);
144 1
145 1 TR1 = 1; // 起动定时器1
146 1 // EIP2 |= 0x40; // 设置UART1为高优先级
147 1 EIE2 |= 0x40; // 允许UART1中断
148 1 }
149
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 245 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 65 3
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 + -