📄 main.lst
字号:
C51 COMPILER V7.08 MAIN 11/11/2005 16:57:28 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND TABS(8)
line level source
1 #include <reg9e5.h>
2
3
4 #define int8u unsigned char
5 #define int16u unsigned int
6 #define INT8U unsigned char
7 #define INT16U unsigned int
8
9
10
11 #define WRC 0x00 //W_RF_CONFIG
12 #define RRC 0x10 //R_RF_CONFIG
13 #define WTP 0x20 //W_TX_PAYLOAD
14 #define RTP 0x21 //R_TX_PAYLOAD
15 #define WTA 0x22 //W_TX_ADDRESS
16 #define RTA 0x23 //R_TX_ADDRESS
17 #define RRP 0x24 //R_RX_PAYLOAD
18 #define RAD 0x40 //R_ADC_DATA
19 #define WAC 0x44 //W_ADC_CONFIG
20 #define RAC 0x46 //R_ADC_CONFIG
21 #define WTU 0x50 //W_TEST_UNLOCK (use with data A5)
22 #define WTR 0x52 //W_TEST_REGISTER
23 #define RTR 0x53 //R_TEST_REGISTER
24 #define CC 0x80 //CHANNEL_CONFIG
25 #define SAV 0xC0 //START_ADC_CONV
26 #define HFREQ 1 // 0=433MHz, 1=868/915MHz 19/08/2004 set 915mhz
27 #define POWER 3 // 0=min power...3 = max power
28
29 #define TurnBY() TRX_CE = 0;TXEN = 0
30
31
32 sbit LEDG =P0^6;
33 sbit LEDR =P0^5;
34
35
36 int8u Nrf9e5Config[10] = {
37 0x28, //频道设置
38
39 0x0e, //自动重发关,发送节电模式关,输出功率10dB,915MHZ
40
41 0x44, //收发地址都为4字节
42
43 0x0a, //接收数据长度,10字节
44
45 0x0a, //发送数据长度,10字节
46
47 0xe7,
48 0xe7,
49 0xe7,
50 0xe7, //地址
51
52 0xdf //CRC开,16位校验,16M晶振,外部时钟使能500KHZ输出
53 };
54
55
C51 COMPILER V7.08 MAIN 11/11/2005 16:57:28 PAGE 2
56 int8u Rxbuf[37];
57
58
59 int8u timer[2];
60 int8u T0LREL, T0HREL;
61
62
63
64 /*****************************************************************************************
65 //函数名:void delay(int16u s)
66 //输入:时间
67 //输出:无
68 //功能描述:普通廷时
69 /*****************************************************************************************/
70 void delay(int16u s)
71 {
72 1 int16u i;
73 1 for(i=0; i<s; i++);
74 1 for(i=0; i<s; i++);
75 1 }
76
77 /*****************************************************************************************
78 //函数名:int8u SpiReadWrite(int8u b)
79 //输入:发送的数据
80 //输出:收到的数据
81 //功能描述:SPI发送接收一个字节
82 /*****************************************************************************************/
83 int8u SpiReadWrite(int8u b)
84 {
85 1 EXIF &= ~0x20; // Clear SPI interrupt
86 1 SPI_DATA = b; // Move byte to send to SPI data register
87 1 while((EXIF & 0x20) == 0x00); // Wait until SPI hs finished transmitting
88 1 return SPI_DATA;
89 1 }
90
91
92
93 /*****************************************************************************************
94 //函数名:InitTimer(void)
95 //输入:无
96 //输出:无
97 //功能描述:定时器0初始化
98 /*****************************************************************************************/
99 void InitTimer(void)
100 {
101 1 timer[0] = timer[1] = 0;
102 1
103 1 TR0 = 0;
104 1 TMOD &= ~0x03;
105 1 TMOD |= 0x01; // mode 1
106 1 CKCON |= 0x00; // T0M = 1 (/4 timer clock)
107 1
108 1 T0LREL = 0x60; // 1KHz tick...
109 1 T0HREL = 0xF0; // ... = 65536-16e6/(4*1e3) = F060h
110 1 TF0 = 0; // Clear any pending Timer0 interrupts
111 1 TR0 = 1; // Start Timer0
112 1 ET0 = 1; // Enable Timer0 interrupt
113 1 }
114
115
116
117
C51 COMPILER V7.08 MAIN 11/11/2005 16:57:28 PAGE 3
118 /*****************************************************************************************
119 //函数名:ResetTimer(int8u n)
120 //输入:要复位的计时器
121 //输出:无
122 //功能描述:复位计时器
123 /*****************************************************************************************/
124 void ResetTimer(int8u n)
125 {
126 1 ET0 = 0; // Disable Timer0 interrupt
127 1 timer[n & 0x01] = 0; // Clear timer[n]
128 1 ET0 = 1; // Enable Timer0 interrupt
129 1 }
130
131
132 /*****************************************************************************************
133 //函数名:int16u GetTimer(int8u n)
134 //输入:要读的计时器
135 //输出:读出值
136 //功能描述:读计时器
137 /*****************************************************************************************/
138 int16u GetTimer(int8u n)
139 {
140 1 int16u tmp;
141 1 ET0 = 0; // Disable Timer0 interrupt
142 1 tmp = timer[n]; // Clear timer[n]
143 1 ET0 = 1; // Enable Timer0 interrupt
144 1 return tmp;
145 1 }
146
147
148
149 /*****************************************************************************************
150 //函数名:void InitCpu(void)
151 //输入:无
152 //输出:无
153 //功能描述:Cpu初始化
154 /*****************************************************************************************/
155 void InitCpu(void)
156 {
157 1 int8u cklf;
158 1
159 1 SPICLK = 0; // Max SPI clock
160 1 SPI_CTRL = 0x02; // Connect internal SPI controller to Radio
161 1
162 1 // Switch to 16MHz clock:
163 1 RACSN = 0;
164 1 SpiReadWrite(RRC | 0x09);
165 1 cklf = SpiReadWrite(0) | 0x04;
166 1 RACSN = 1;
167 1 RACSN = 0;
168 1 SpiReadWrite(WRC | 0x09);
169 1 SpiReadWrite(cklf);
170 1 RACSN = 1;
171 1
172 1 P0_DIR=P0_DIR&0x1F; //led p0.6 p0.5 P0.7 output
173 1 LEDR=0;
174 1 LEDG=0;
175 1 P0_DIR |= 0x18; // P0.4 /3 is input
176 1 P0_DIR &= 0xf6;
177 1
178 1 InitTimer();
179 1 EA = 1;
C51 COMPILER V7.08 MAIN 11/11/2005 16:57:28 PAGE 4
180 1 }
181
182 /*****************************************************************************************
183 //函数名:void Init9E5(void)
184 //输入:无
185 //输出:无
186 //功能描述:Nrf9e5初始化,这里我们配置成32位地址。
187 /*****************************************************************************************/
188 void Init9E5(void)
189 {
190 1 int8u i;
191 1
192 1 TRX_CE=0;
193 1 TXEN=0; //配置模式
194 1
195 1 RACSN = 0;
196 1 SpiReadWrite(WRC);
197 1 for(i=0; i<10; i++)
198 1 {
199 2 SpiReadWrite(Nrf9e5Config[i]);
200 2 }
201 1
202 1 RACSN = 1;
203 1 }
204
205
206 /*****************************************************************************************
207 //函数名:int8u Recepacket(void)
208 //输入:接收数据缓冲区
209 //输出:成功返回1,否则返回0
210 //功能描述:接收数据存在缓冲区内
211 /*****************************************************************************************/
212 int8u Recepacket(void)
213 {
214 1 int8u i;
215 1 TXEN = 0;
216 1 TRX_CE = 1;
217 1 ResetTimer(1);
218 1 while(DR == 0)
219 1 {
220 2 if(GetTimer(1) > 300)
221 2 {
222 3 TRX_CE = 0;
223 3 return 0;
224 3 }
225 2
226 2 }
227 1 TRX_CE = 0;
228 1
229 1 RACSN = 0;
230 1 SpiReadWrite(RRP);
231 1 i = 0;
232 1
233 1 for(i=0; i<4; i++)
234 1 {
235 2 Rxbuf[i] = SpiReadWrite(0);
236 2 }
237 1 while(DR)
238 1 {
239 2 SpiReadWrite(0);
240 2 }
241 1 RACSN = 1;
C51 COMPILER V7.08 MAIN 11/11/2005 16:57:28 PAGE 5
242 1 return 1;
243 1
244 1 }
245
246
247
248
249 /******************************************************************************************
250 *******************************************************************************************
251 ************************************中断服务程序*********************************************
252 *******************************************************************************************
253 ******************************************************************************************/
254 void Timer0ISR (void) interrupt 1
255 {
256 1 EA = 0;
257 1 TH0 = T0HREL; // Reload Timer0 high byte
258 1 TL0 = T0LREL; // Reload Timer0 low byte
259 1 timer[0]++; // Increment timer[0]
260 1 timer[1]++;
261 1 EA =1;
262 1 }
263
264
265
266
267 /******************************************************************************************
268 *******************************************************************************************
269 ******************************************主程序********************************************
270 *******************************************************************************************
271 ******************************************************************************************/
272 main()
273 {
274 1
275 1 int8u temp;
276 1 InitCpu();
277 1 delay(5000);
278 1
279 1 Init9E5();
280 1
281 1 LEDR = 1;
282 1 LEDG = 1;
283 1
284 1
285 1 while(1)
286 1 {
287 2 temp = Recepacket();
288 2 if(temp == 1)
289 2 {
290 3 LEDR = 0;
291 3 LEDG = 0;
292 3 delay(20000);
293 3 LEDR = 1;
294 3 LEDG = 1;
295 3 }
296 2 }
297 1
298 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 313 ----
CONSTANT SIZE = ---- ----
C51 COMPILER V7.08 MAIN 11/11/2005 16:57:28 PAGE 6
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 51 ----
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 + -