📄 main.lst
字号:
249 1 SCK = 0;
250 1 _nop_();
251 1 _nop_();
252 1 for(i=0; i<8; i++)
253 1 {
254 2 if((dat & 0x80) == 0x80)
255 2 {
256 3 MOSI = 1;
257 3 MISO = 1;
258 3 }
259 2 else
260 2 {
261 3 MOSI = 0;
262 3 MISO = 0;
263 3 }
264 2 dat <<= 1;
265 2 SCK = 1;
266 2 _nop_();
267 2 _nop_();
268 2 SCK = 0;
269 2 _nop_();
270 2 _nop_();
271 2 }
272 1 }
273
274
275 /*****************************************************************************************
276 //函数名:INT8U SpiReadByte(void)
277 //输入:无
278 //输出:读出的数据
279 //功能描述:SPI读出一个字节
280 /*****************************************************************************************/
281 INT8U SpiReadByte(void)
282 {
283 1 INT8U i,temp;
284 1 temp = 0;
285 1
286 1 MISO = 1;
287 1 MOSI = 1;
288 1
289 1 SCK = 0;
290 1 _nop_();
291 1 _nop_();
292 1 for(i=0; i<8; i++)
293 1 {
294 2 temp <<= 1;
295 2 SCK = 1;
296 2 _nop_();
297 2 _nop_();
298 2 if(MISO)temp++;
299 2 SCK = 0;
300 2 _nop_();
301 2 _nop_();
C51 COMPILER V7.08 MAIN 04/13/2006 17:24:35 PAGE 6
302 2 }
303 1 return temp;
304 1 }
305
306 /*****************************************************************************************
307 //函数名:SetTxMode()
308 //输入:无
309 //输出:无
310 //功能描述:转为发送模式
311 /*****************************************************************************************/
312 void SetTxMode(void)
313 {
314 1 unsigned char ch;
315 1 CS = 1;
316 1 Delay100us(0);
317 1 ch = FRESELE<<1;
318 1 SpiWriteByte(ch);
319 1 CS = 0;
320 1 Delay100us(2);
321 1 }
322
323 /*****************************************************************************************
324 //函数名:SetRxMode()
325 //输入:无
326 //输出:无
327 //功能描述:转为接收模式
328 /*****************************************************************************************/
329 void SetRxMode(void)
330 {
331 1 unsigned char ch;
332 1 CS = 1;
333 1 Delay100us(0);
334 1 ch = FRESELE<<1;
335 1 SpiWriteByte(ch | 0x01);
336 1 CS = 0;
337 1 Delay100us(2); //200us
338 1 }
339
340
341
342 /*****************************************************************************************
343 //函数名:Nrf2401Init()
344 //输入:地址,发送数据位数
345 //输出:无
346 //功能描述:Nrf2401Init初始化,这里我们配置成32位地址。
347 /*****************************************************************************************/
348 void Nrf2401Init(void)
349 {
350 1 INT8U i;
351 1 CE = 0;
352 1 CS = 1;
353 1
354 1 Delay100us(0);
355 1 for(i=0; i<15; i++)
356 1 {
357 2 SpiWriteByte(CofigBuf[i]);
358 2 }
359 1
360 1 CS = 0;
361 1
362 1 Delay100us(30);
363 1
C51 COMPILER V7.08 MAIN 04/13/2006 17:24:35 PAGE 7
364 1 }
365
366
367 /*****************************************************************************************
368 //函数名:TranData()
369 //输入:无
370 //输出:无
371 //功能描述:发送发送缓冲区的数据。
372 /*****************************************************************************************/
373 void TranData(void)
374
375 {
376 1 INT8U i;
377 1
378 1 SetTxMode();
379 1
380 1 CE = 1;
381 1
382 1 Delay100us(1);
383 1
384 1 for(i=0; i<4; i++)
385 1 {
386 2 SpiWriteByte(AddrCofig[i]); //发送地址
387 2 }
388 1 for(i=0; i<5; i++)
389 1 {
390 2 SpiWriteByte(TxBuf[i]); //发送五位
391 2 }
392 1
393 1
394 1 CE = 0;
395 1
396 1 Delay100us(13);
397 1 }
398
399
400
401 /*****************************************************************************************
402 //函数名:void ReceiveBytes(void)
403 //输入:无
404 //输出:无
405 //功能描述:接收数据存在接收缓冲区内
406 /*****************************************************************************************/
407 INT8U ReceivePacket(void)
408 {
409 1 INT8U i;
410 1 SetRxMode();
411 1 CE = 1;
412 1 ResetTimer(1);
413 1 while(DR1 == 0)
414 1 {
415 2 if(ReadTimer(1) > 1000)
416 2 {
417 3 CE = 0;
418 3 return 0;
419 3 }
420 2 }
421 1 i = 0;
422 1 while(DR1)
423 1 {
424 2 RxBuf[i] = SpiReadByte();
425 2 i++;
C51 COMPILER V7.08 MAIN 04/13/2006 17:24:35 PAGE 8
426 2 if (i == 5)
427 2 break;
428 2 }
429 1 while(DR1)
430 1 {
431 2 SpiReadByte();
432 2 }
433 1 CE = 0;
434 1 return 1;
435 1 }
436
437 /******************************************************************************************
438 *******************************************************************************************
439 ************************************中断服务程序*******************************************
440 *******************************************************************************************
441 ******************************************************************************************/
442 void Timer0ISR(void) interrupt 1
443 {
444 1 EA = 0;
445 1 TH0+=TIMER0H;
446 1 TL0+=TIMER0L;
447 1 timer[0]++;
448 1 timer[1]++;
449 1 EA = 1;
450 1 }
451
452
453
454
455
456 /******************************************************************************************
457 *******************************************************************************************
458 ******************************************主程序*******************************************
459 *******************************************************************************************
460 ******************************************************************************************/
461 main()
462 {
463 1 INT8U temp, i;
464 1 CpuInit();
465 1 TimerInit();
466 1 UartInit();
467 1 LED1=0;
468 1 LED2=0;
469 1 delay(20000);
470 1 LED1=1;
471 1 LED2=1;
472 1 Nrf2401Init();
473 1 delay(500);
474 1
475 1 while(1)
476 1 {
477 2 temp = ReceivePacket();
478 2 if(temp == 1)
479 2 {
480 3 LED1=0;
481 3 delay(5000);
482 3 LED1=1;
483 3 for(i=0; i<5; i++)
484 3 {
485 4 SendCh(RxBuf[i]);
486 4 }
487 3 }
C51 COMPILER V7.08 MAIN 04/13/2006 17:24:35 PAGE 9
488 2 }
489 1 }
490
491
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 483 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 39 ----
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 + -