📄 main.lst
字号:
231 void SetTxMode(void)
232 {
233 1 int8u ch;
234 1 CS = 1;
235 1 Delay100us(0);
236 1 ch = FRESELE << 1;
237 1 SpiReadWrite(ch);
238 1 CS = 0;
239 1 }
240 /*****************************************************************************************
241 //函数名:SendC()
C51 COMPILER V7.08 MAIN 10/28/2005 14:14:11 PAGE 5
242 //输入:发送的数据
243 //输出:无
244 //功能描述:串口初始化
245 /*****************************************************************************************/
246 void SendCh(char c)
247 {
248 1 TI = 0;
249 1 SBUF = c;
250 1 while(!TI);
251 1 TI = 0;
252 1 }
253
254 /*****************************************************************************************
255 //函数名:Nrf24E1Init()
256 //输入:无
257 //输出:无
258 //功能描述:Nrf24E1Init初始化,这里我们配置成32位地址。
259 /*****************************************************************************************/
260 void Nrf24E1Init()
261 {
262 1 int8u i;
263 1 SPICLK = 0; // Max SPI clock
264 1 SPI_CTRL = 0x02; // Connect internal SPI controller to Radio
265 1 CE = 0;
266 1 CS = 1; // RF SPI CS = 1
267 1 Delay100us(0);
268 1 SpiReadWrite(0x00); // We are not using the DuoCeiver functionallity
269 1 for(i=1;i<15;i++)
270 1 {
271 2 SpiReadWrite(RFConfig[i]);
272 2 }
273 1 CS = 0;
274 1
275 1 Delay100us(30);
276 1 }
277
278
279 /*****************************************************************************************
280 //函数名:TransmitPacket(int8u *pBuf)
281 //输入:发送的数据
282 //输出:无
283 //功能描述:发送发送缓冲区的数据
284 /*****************************************************************************************/
285 TransmitPacket(int8u *pBuf)
286 {
287 1 int8u i;
288 1
289 1 SetTxMode();
290 1 CE = 1;
291 1 Delay100us(1);
292 1
293 1 for (i=0;i<ADDR_COUNT;i++)
294 1 {
295 2 SpiReadWrite(rfAddress[i]);
296 2 }
297 1 SpiReadWrite(1);
298 1 for (i=0;i<4;i++)
299 1 {
300 2 SpiReadWrite(pBuf[i]);
301 2 }
302 1 CE = 0;
303 1 Delay100us(13); // Wait until finished transmitting (200us + 256us)//delay(5
C51 COMPILER V7.08 MAIN 10/28/2005 14:14:11 PAGE 6
-)
304 1 }
305
306
307 /*****************************************************************************************
308 //函数名:void SendAck(unsigned char msgid)
309 //输入:发送的数据
310 //输出:无
311 //功能描述:发送发送缓冲区的数据
312 /*****************************************************************************************/
313 void SendAck(unsigned char msgid)
314 {
315 1
316 1 int8u i;
317 1
318 1 SetTxMode();
319 1 CE = 1;
320 1 Delay100us(2);
321 1
322 1 for (i=0;i<4;i++)
323 1 {
324 2 SpiReadWrite(rfAddress[i]);
325 2 }
326 1 SpiReadWrite(msgid);
327 1 CE = 0;
328 1 Delay100us(1);
329 1
330 1 }
331 /*****************************************************************************************
332 //函数名:int8u ReceivePacket(int8u *pBuf)
333 //输入:接收数据缓冲区
334 //输出:成功返回1,否则返回0
335 //功能描述:接收数据存在缓冲区内
336 /*****************************************************************************************/
337 int8u ReceivePacket(int8u *pBuf)
338 {
339 1 int8u i,cmd;
340 1
341 1 SetRxMode();
342 1 CE = 1;
343 1 ResetTimer(1);
344 1 while(DR1 == 0)
345 1 {
346 2 if (ReadTimer(1) > 1000)
347 2 {
348 3 CE = 0;
349 3 return 0;
350 3 }
351 2 }
352 1 cmd = SpiReadWrite(0);
353 1 i = 0;
354 1 while(DR1)
355 1 {
356 2 pBuf[i] = SpiReadWrite(0);
357 2 i++;
358 2 if (i == 5)
359 2 break;
360 2 }
361 1 while(DR1)
362 1 {
363 2 SpiReadWrite(0);
364 2 }
C51 COMPILER V7.08 MAIN 10/28/2005 14:14:11 PAGE 7
365 1 CE = 0;
366 1 return cmd;
367 1 }
368
369 /******************************************************************************************
370 *******************************************************************************************
371 ************************************中断服务程序*******************************************
372 *******************************************************************************************
373 ******************************************************************************************/
374 void Timer0ISR (void) interrupt 1 using 1 //定时器0中断
375 {
376 1 TF0 = 0; // Clear Timer0 interrupt
377 1 TH0 = t0hrel; // Reload Timer0 high byte
378 1 TL0 = t0lrel; // Reload Timer0 low byte
379 1 timer[0]++; // Increment timer[0]
380 1 timer[1]++; // Increment timer[1
381 1 }
382
383 void UartISR (void) interrupt 4 using 2 //串口中断
384 {
385 1 int8u temp;
386 1
387 1 EA = 0;
388 1 if(RI)
389 1 {
390 2 temp = SBUF;
391 2 if(temp == '@') //帧头
392 2 {
393 3 Rx.Buf[0] = '@';
394 3 Rx.Counter = 1;
395 3 }
396 2 else if(temp == '*') //帧尾
397 2 {
398 3 Rx.Buf[Rx.Counter] = temp;
399 3 Rx.Buf[Rx.Counter + 1] = '\0';
400 3 Rx.NewData = 1;
401 3 }
402 2 else if(Rx.Counter < 39){
403 3 Rx.Buf[Rx.Counter] = temp;
404 3 Rx.Counter += 1;
405 3 }
406 2 RI = 0;
407 2 }
408 1 if(TI)
409 1 {
410 2 TI = 0;
411 2 }
412 1 EA = 1;
413 1 }
414
415
416 /******************************************************************************************
417 *******************************************************************************************
418 ******************************************主程序*******************************************
419 *******************************************************************************************
420 ******************************************************************************************/
421 void main(void)
422 {
423 1 unsigned char temp;
424 1 SciInit();
425 1 TimerInit();
426 1 EA=1;
C51 COMPILER V7.08 MAIN 10/28/2005 14:14:11 PAGE 8
427 1 LEDR=0;
428 1 LEDG=0;
429 1 delay(10000);
430 1 LEDR=1;
431 1 LEDG=1;
432 1
433 1 Nrf24E1Init();
434 1 while(1)
435 1 {
436 2 temp = ReceivePacket(buf);
437 2 if(temp != 0)
438 2 {
439 3 SendAck(temp);
440 3 SendCh(buf[0]);
441 3 SendCh(buf[1]);
442 3 SendCh(buf[2]);
443 3 SendCh(buf[3]);
444 3 LEDR=0;
445 3 LEDG=0;
446 3 delay(5000);
447 3 LEDR=1;
448 3 LEDG=1;
449 3 }
450 2 }
451 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 608 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 53 6
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 + -