📄 ex1c.lst
字号:
272 2 if ((rxTout != 0) && (GetTimer(1) > rxTout))
273 2 {
274 3 CE = 0;
275 3 return 0;
276 3 }
277 2 }
278 1 cmd = SpiReadWrite(0);
279 1 i = 0;
280 1 while(DR1)
281 1 {
282 2 pBuf[i++] = SpiReadWrite(0);
283 2 if (i == nBytes)
284 2 break;
285 2 }
286 1 while(DR1)
287 1 {
288 2 SpiReadWrite(0);
289 2 }
290 1 CE = 0;
291 1 return cmd;
292 1 }
293
294 static unsigned char WaitAck(void)
295 {
296 1 unsigned char ack;
297 1 SetRxMode();
298 1 CE = 1;
299 1 ResetTimer(0);
300 1 while(DR1 == 0)
301 1 {
302 2 if (GetTimer(0) > 10) // 3ms time-out/10MS
C51 COMPILER V7.08 EX1C 06/06/2005 17:50:27 PAGE 6
303 2 {
304 3 CE = 0;
305 3 return 0;
306 3 }
307 2 }
308 1 ack = SpiReadWrite(0);
309 1 while(DR1)
310 1 {
311 2 SpiReadWrite(0);
312 2 }
313 1 CE = 0;
314 1 return ack;
315 1 }
316
317 unsigned char TransmitPacket(unsigned char *pBuf)
318 {
319 1 unsigned int i;
320 1 unsigned char cmdt, cmdr, j;
321 1
322 1 seq++;
323 1 cmdt = 0x10 | (seq & 0x0f);
324 1 cmdr = 0;
325 1 ResetTimer(1);
326 1 for(;;)
327 1 {
328 2 for (i=0;i<3;i++) //JUST 6 TIME
329 2 {
330 3 // Repeat two times on all channels if no ACK is received
331 3 for (j=0;j<2;j++)
332 3 {
333 4 TransmitBytes(pBuf, cmdt);
334 4 cmdr = WaitAck();
335 4 if ((cmdr != 0) && ((cmdr & 0x0f) == (cmdt & 0x0f)))
336 4 {
337 5 //hopIdx++; NOT HOP
338 5 return 1;
339 5 }
340 4 }
341 3 // hopIdx++; NOT HOP
342 3 if ((txTout != 0) && (GetTimer(1) > txTout))
343 3 return 0;
344 3 }
345 2 }
346 1 return 0;
347 1 }
348
349 unsigned char ReceivePacket(unsigned char *pBuf)
350 {
351 1 unsigned char cmd;
352 1
353 1 //done = 0;
354 1 while(1)
355 1 {
356 2 cmd = ReceiveBytes(pBuf);
357 2 if (cmd == 0)
358 2 return 0;
359 2 cmd = (cmd & 0x0f) | 0x20;
360 2 SendAck(cmd);
361 2 Delay100us(1);
362 2 SendAck(cmd);
363 2 Delay100us(10);
364 2 SendAck(0X20);
C51 COMPILER V7.08 EX1C 06/06/2005 17:50:27 PAGE 7
365 2 //hopIdx++;
366 2 if ((cmd & 0x0f) != seq)
367 2 {
368 3 seq = cmd & 0x0f;
369 3 //done = 1;
370 3 break;
371 3 }
372 2 }
373 1 return 1;
374 1 }
375
376 //void ReceiverTimeout(unsigned tOut)
377 //{
378 // Set the receiver timeout in ms.
379 // 1ms = min timeout, 65536ms is max, 0 means wait forever
380 // rxTout = tOut;
381 //}
382
383 //void TransmitterTimeout(unsigned tOut)
384 //{
385 // Set the transmitter timeout in ms
386 // 1ms is min timeout, 65536ms is max, 0 means wait forever
387 // txTout = tOut;
388 //}
389
390 void InitReceiver(unsigned char n, unsigned char *pAddr)
391 {
392 1 seq = 15;
393 1 rxTout = 1000; // Default 3s timeout
394 1 nBytes = n; // Number of data bytes (0-25)
395 1
396 1 SPICLK = 0; // Max SPI clock
397 1 SPI_CTRL = 0x02; // Connect internal SPI controller to Radio
398 1 CE = 0;
399 1 CS = 1; // RF SPI CS = 1
400 1 Delay100us(0);
401 1
402 1 SpiReadWrite(0x00); // We are not using the DuoCeiver functionallity
403 1 SpiReadWrite((n+1)*8); // Number of Rx data bits
404 1 InitCommon(pAddr);
405 1 }
406
407 void InitTransmitter(unsigned char n, unsigned char *pAddr)
408 {
409 1 seq = 0;
410 1 txTout = 1000; // Default 3s timeout
411 1 nBytes = n; // Number of data bytes (0-25)
412 1 SPICLK = 0; // Max SPI clock
413 1 SPI_CTRL = 0x02; // Connect internal SPI controller to Radio
414 1 CE = 0;
415 1 CS = 1; // RF SPI CS = 1
416 1 Delay100us(0);
417 1 SpiReadWrite(0x00); // We are not using the DuoCeiver functionallity
418 1 SpiReadWrite(8); // Number of Rx data bits is 8 for the transmitter
419 1 InitCommon(pAddr);
420 1 }
421 void ReceiveFile(void)
422 {
423 1 // unsigned char xdata i;
424 1
425 1 InitReceiver(25, 0);
426 1 while(1)
C51 COMPILER V7.08 EX1C 06/06/2005 17:50:27 PAGE 8
427 1 {
428 2 if (ReceivePacket(buf) != 0)
429 2 {
430 3
431 3 LEDG=0;
432 3 LEDR=1;
433 3
434 3 //for (i=0;i<25;i++) //if use ISD debug ,dont use this one
435 3 // { PutChara(buf[i]);}
436 3 //for (j=0;j<20;j++)
437 3 //{Delay100us(200);} //LEDG 400mS
438 3
439 3 }
440 2 else
441 2 {
442 3 LEDR=0;
443 3 LEDG=1; // Indicates an error
444 3 //for (j=0;j<20;j++)
445 3 //{Delay100us(200);} //LEDG 400mS
446 3
447 3 }
448 2 //PutChar(buf[n++]);
449 2 }
450 1 }
451
452
453 void TransmitFile(void)
454 {
455 1 unsigned int xdata temp,j;
456 1 unsigned char xdata n;
457 1 n=0;
458 1 InitTransmitter(25, 0);
459 1 while(1)
460 1 {
461 2 for (aaa=0;aaa<25;aaa++)
462 2 {buf[aaa]=ID[aaa];}
463 2 n=n+1;
464 2 buf[24]=n;
465 2
466 2 temp= ( TransmitPacket(buf));
467 2
468 2 if (temp==1)
469 2 { LEDR=0;
470 3 //s=s-1;
471 3 // buf[19]=s;
472 3 // speeker();
473 3 }
474 2 else {LEDG=0; //Y LED OFF
475 3 // i=4;
476 3 // s=4;
477 3 // speeker1();
478 3 }
479 2 if (temp==1)
480 2 { for (j=0;j<25;j++)
481 3 {Delay100us(200);} //LEDG 20mS
482 3 //LEDR=0;
483 3 LEDR=1;
484 3 }
485 2 else {
486 3 for (j=0;j<25;j++)
487 3 {Delay100us(200);} //LEDG 400mS
488 3 //LEDR=0;
C51 COMPILER V7.08 EX1C 06/06/2005 17:50:27 PAGE 9
489 3 LEDG=1;
490 3 }
491 2 for (bbb=0;bbb<2;bbb++) //2s
492 2 {
493 3 for (aaa=0;aaa<100;aaa++) //delay 1s
494 3 {Delay100us(100);} //delay10ms
495 3 }
496 2 }
497 1 }
498 int main(void)
499 { unsigned char aaa;
500 1 Init();
501 1
502 1 ISDwait();
503 1 EA=1;
504 1 LEDR=0;
505 1 LEDG=0;
506 1 for (aaa=0;aaa<100;aaa++)
507 1 {Delay100us(50);}
508 1
509 1 LEDR=1;
510 1 LEDG=1;
511 1 for (aaa=0;aaa<100;aaa++)
512 1 {Delay100us(100);}
513 1 LEDR=0;
514 1 LEDG=0;
515 1 while(1)
516 1 {
517 2
518 2 // case 'R':
519 2 if (KEYR==0)
520 2 {
521 3 LEDR=1;
522 3 LEDG=0;
523 3 ReceiveFile();
524 3 }
525 2
526 2 //case 'T':
527 2 if (KEYT==0)
528 2 {
529 3 LEDR=0;
530 3 LEDG=1;
531 3 TransmitFile();
532 3 }
533 2
534 2 }
535 1
536 1 return 0;
537 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1192 ----
CONSTANT SIZE = 256 ----
XDATA SIZE = ---- 5
PDATA SIZE = ---- ----
DATA SIZE = 69 19
IDATA SIZE = 40 ----
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 + -