📄 my_nrf905.lst
字号:
248 3 recv0_buf[recv0_num] = recv0_data;
249 3 recv0_num++;
250 3 recv0_flag = 1;
251 3 }
252 2 else
253 2 {
254 3 recv1_data = SBUF;
255 3 recv1_buf[recv1_num] = recv1_data;
256 3 recv1_num++;
257 3 recv1_flag = 1;
258 3 }
259 2 rec_ok = 1; //表示串口现在接收完了。
260 2 }
261 1 _nop_();
262 1 }
263
264 /*************串口发送一个字节子程序******/
265 void SendByte(unsigned char x)
266 {
267 1 SBUF=x;
268 1 while(!TI);
269 1 TI=0;
270 1 }
271 /***********RF接收状态**********/
272 void SetRxStatus(void)
273 {
274 1 TRX_CE =1;
275 1 TX_EN =0;
276 1 delay650();
277 1 delay650();
278 1
279 1 TR0=ON; //启动T0定时
280 1 ET0=1;
281 1 delay(50);
282 1 write_flag=False;
283 1 }
284
285 /*********RF发送打包子程序***********/
286 void TxPack(void)
287 {
288 1 unsigned char *a1,*a2;
289 1 unsigned char b1,b2;
290 1 RERFOK = 0; //发送指示灯亮
291 1 write_flag=1;
292 1 TX_EN = OFF;
293 1 TRX_CE = OFF;
294 1 delay650();
295 1
296 1 Spi_tx_addr();
297 1 _nop_();
298 1
299 1 if(recv0_flag)
300 1 {
301 2 _nop_();
302 2 if(deal0_flag)
303 2 {
C51 COMPILER V7.50 MY_NRF905 11/14/2005 16:14:24 PAGE 6
304 3 a1 = &recv0_buf[0];
305 3 b1 = recv0_num;
306 3 SpiWrite_some(a1, b1);
307 3 _nop_();
308 3
309 3 RF_send ();
310 3 _nop_();
311 3 }
312 2 }
313 1 if(recv1_flag)
314 1 {
315 2 _nop_();
316 2 if(deal1_flag)
317 2 {
318 3 a2 = &recv1_buf[0];
319 3 b2 = recv1_num;
320 3 SpiWrite_some(a2, b2);
321 3 _nop_();
322 3
323 3 RF_send ();
324 3 _nop_();
325 3 }
326 2 }
327 1 RERFOK = 1; //发送指示灯亮
328 1 write_flag = 0;
329 1 }
330
331
332
333 /**************RF接收包**********/
334
335 /*******主程序*******/
336 void main(void)
337 {
338 1 P1=0xff;
339 1 P2=0xff;
340 1 P3=0xff;
341 1 Sysinit(); //系统初始化
342 1
343 1 frequency=0; //设置频点
344 1 frequency=(P2^0x0f)&0x0f;
345 1
346 1 delay(30);
347 1
348 1 InitnRF905();
349 1
350 1 DR=OFF;
351 1 AM=OFF;
352 1
353 1 delay(60);
354 1 /*******全局变量标志位初值*********/
355 1
356 1 deal0_flag = 0; //处理串口数组0的标志位
357 1 deal1_flag = 0; //处理串口数组1的标志位
358 1 rec_flag1 = 0; //串口接收数组分类的标志位
359 1 recv0_flag = 0; //串口接收数组0是否有数据
360 1 recv1_flag = 0; //串口接收数组1是否有数据
361 1
362 1 rec_ok = 0; //串口单个字节接收是否完成的标志位
363 1 RFrec_flag = 0; //RF接收数组分类标志位
364 1 RFrec0_flag = 0; //RF接收数组0是否有数据的标志位
365 1 RFrec1_flag = 0; //RF接收数组1是否有数据的标志位
C51 COMPILER V7.50 MY_NRF905 11/14/2005 16:14:24 PAGE 7
366 1
367 1 AMflag = 0;
368 1 count_p = 0;
369 1 count_r = 0;
370 1 write_flag = 0;; //是否正在读取的标志位
371 1 delay_flag = 0; //延时中断标志位
372 1
373 1 recv0_num = 0; //串口接收数组0的字节个数
374 1 recv1_num = 0; //串口接收数组1的字节个数
375 1
376 1 RFrec0_num = 0; //RF接收数组0的字节个数
377 1 RFrec1_num = 0; //RF接收数组1的字节个数
378 1
379 1 PWR_UP=ON; //给nRF905上电,并设置
380 1 TRX_CE=OFF;
381 1 TX_EN=OFF;
382 1 Config905();
383 1
384 1 delay(60);
385 1 IE0 = 0;
386 1 EX0 = 1;
387 1
388 1 delay650();
389 1 SetRxStatus();
390 1
391 1 while(1)
392 1 {
393 2 _nop_();
394 2 /********检测串口接收数组0是否有数据发送**********/
395 2 if (rec_ok)
396 2 {
397 3 _nop_();
398 3 if (recv0_flag)
399 3 {
400 4 rec_flag1 = 1;
401 4 deal0_flag = 1;
402 4 rec_ok = 0;
403 4 TxPack();
404 4 _nop_();
405 4 delay650();
406 4 delay650();
407 4 // TI = 0;
408 4 // for(count_r=0;count_r < recv0_num ;count_r++)
409 4 // {
410 4 // SendByte(recv0_buf[count_r]);
411 4 // }
412 4 recv0_num = 0;
413 4 recv0_flag = 0;
414 4 rec_flag1 = 0;
415 4 deal0_flag =0;
416 4 }
417 3 }
418 2 /**********下面是RF接收数据**********/
419 2 if(RFrec0_flag)
420 2 {
421 3
422 3 RFrec_flag = 1;
423 3 RFrec0_flag = 0;
424 3 RERFOK = 0;
425 3 delay650();
426 3 if ((rxpack0_buf[0] == 0xFA) && (rxpack0_buf[1] == 0xAF))
427 3 {
C51 COMPILER V7.50 MY_NRF905 11/14/2005 16:14:24 PAGE 8
428 4 TI = 0;
429 4 for(count_r=2;count_r < RFrec0_num + 2 ;count_r++)
430 4 {
431 5 SendByte(rxpack0_buf[count_r]);
432 5 }
433 4 }
434 3 RFrec0_num = 0;
435 3 RFrec_flag = 0;
436 3 RERFOK = 1;
437 3 }
438 2 /**********检测接收状态************/
439 2 delay650();
440 2 SetRxStatus();
441 2 delay650();
442 2 /********检测串口接收数组1是否有数据发送**********/
443 2 if (rec_ok)
444 2 {
445 3 _nop_();
446 3 if (recv1_flag)
447 3 {
448 4 rec_ok = 0;
449 4 deal1_flag = 1;
450 4 TxPack();
451 4 _nop_();
452 4 delay650();
453 4 delay650();
454 4 // TI = 0;
455 4 // for(count_r=0;count_r < recv1_num; count_r++)
456 4 // {
457 4 // SendByte(recv1_buf[count_r]);
458 4 // }
459 4 recv1_num = 0;
460 4 recv1_flag = 0;
461 4 deal1_flag = 0;
462 4 }
463 3 }
464 2 /*********判断RF接收的数据是否正确***********/
465 2 if(RFrec1_flag)
466 2 {
467 3 RERFOK = 0;
468 3 RFrec1_flag = 0;
469 3 if ((rxpack1_buf[0] == 0xFA) && (rxpack1_buf[1] == 0xAF))
470 3 {
471 4 TI = 0;
472 4 for(count_r=2;count_r < RFrec1_num + 2;count_r++)
473 4 {
474 5 SendByte(rxpack1_buf[count_r]);
475 5 }
476 4 }
477 3 RFrec1_num = 0;
478 3 RERFOK = 1;
479 3 }
480 2 /************检测接收状态************/
481 2 delay650();
482 2 SetRxStatus();
483 2 delay650();
484 2 }
485 1 _nop_();
486 1 }
487
C51 COMPILER V7.50 MY_NRF905 11/14/2005 16:14:24 PAGE 9
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1004 ----
CONSTANT SIZE = 27 ----
XDATA SIZE = 765 ----
PDATA SIZE = ---- ----
DATA SIZE = 25 1
IDATA SIZE = ---- ----
BIT SIZE = 13 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -