📄 1100.lst
字号:
410 1 CSN = 1;
411 1 }
412 //*****************************************************************************************
413 //函数名:INT8U halSpiReadReg(INT8U addr)
414 //输入:地址
415 //输出:该状态寄存器当前值
416 //功能描述:SPI读状态寄存器
417 //*****************************************************************************************
418 INT8U halSpiReadStatus(INT8U addr)
419 {
420 1 INT8U value,temp;
421 1 temp = addr | READ_BURST; //写入要读的状态寄存器的地址同时写入读命令
422 1 CSN = 0;
423 1 while (MISO);
424 1 SpiTxRxByte(temp);
425 1 value = SpiTxRxByte(0);
C51 COMPILER V7.06 1100 12/18/2007 19:48:16 PAGE 8
426 1 CSN = 1;
427 1 return value;
428 1 }
429 //*****************************************************************************************
430 //函数名:void halRfWriteRfSettings(RF_SETTINGS *pRfSettings)
431 //输入:无
432 //输出:无
433 //功能描述:配置CC1100的寄存器
434 //*****************************************************************************************
435 void halRfWriteRfSettings(void)
436 {
437 1
438 1 halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL2);//自已加的
439 1 // Write register settings
440 1 halSpiWriteReg(CCxxx0_FSCTRL1, rfSettings.FSCTRL1);
441 1 halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL0);
442 1 halSpiWriteReg(CCxxx0_FREQ2, rfSettings.FREQ2);
443 1 halSpiWriteReg(CCxxx0_FREQ1, rfSettings.FREQ1);
444 1 halSpiWriteReg(CCxxx0_FREQ0, rfSettings.FREQ0);
445 1 halSpiWriteReg(CCxxx0_MDMCFG4, rfSettings.MDMCFG4);
446 1 halSpiWriteReg(CCxxx0_MDMCFG3, rfSettings.MDMCFG3);
447 1 halSpiWriteReg(CCxxx0_MDMCFG2, rfSettings.MDMCFG2);
448 1 halSpiWriteReg(CCxxx0_MDMCFG1, rfSettings.MDMCFG1);
449 1 halSpiWriteReg(CCxxx0_MDMCFG0, rfSettings.MDMCFG0);
450 1 halSpiWriteReg(CCxxx0_CHANNR, rfSettings.CHANNR);
451 1 halSpiWriteReg(CCxxx0_DEVIATN, rfSettings.DEVIATN);
452 1 halSpiWriteReg(CCxxx0_FREND1, rfSettings.FREND1);
453 1 halSpiWriteReg(CCxxx0_FREND0, rfSettings.FREND0);
454 1 halSpiWriteReg(CCxxx0_MCSM0 , rfSettings.MCSM0 );
455 1 halSpiWriteReg(CCxxx0_FOCCFG, rfSettings.FOCCFG);
456 1 halSpiWriteReg(CCxxx0_BSCFG, rfSettings.BSCFG);
457 1 halSpiWriteReg(CCxxx0_AGCCTRL2, rfSettings.AGCCTRL2);
458 1 halSpiWriteReg(CCxxx0_AGCCTRL1, rfSettings.AGCCTRL1);
459 1 halSpiWriteReg(CCxxx0_AGCCTRL0, rfSettings.AGCCTRL0);
460 1 halSpiWriteReg(CCxxx0_FSCAL3, rfSettings.FSCAL3);
461 1 halSpiWriteReg(CCxxx0_FSCAL2, rfSettings.FSCAL2);
462 1 halSpiWriteReg(CCxxx0_FSCAL1, rfSettings.FSCAL1);
463 1 halSpiWriteReg(CCxxx0_FSCAL0, rfSettings.FSCAL0);
464 1 halSpiWriteReg(CCxxx0_FSTEST, rfSettings.FSTEST);
465 1 halSpiWriteReg(CCxxx0_TEST2, rfSettings.TEST2);
466 1 halSpiWriteReg(CCxxx0_TEST1, rfSettings.TEST1);
467 1 halSpiWriteReg(CCxxx0_TEST0, rfSettings.TEST0);
468 1 halSpiWriteReg(CCxxx0_IOCFG2, rfSettings.IOCFG2);
469 1 halSpiWriteReg(CCxxx0_IOCFG0, rfSettings.IOCFG0);
470 1 halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
471 1 halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
472 1 halSpiWriteReg(CCxxx0_ADDR, rfSettings.ADDR);
473 1 halSpiWriteReg(CCxxx0_PKTLEN, rfSettings.PKTLEN);
474 1 }
475 //*****************************************************************************************
476 //函数名:void halRfSendPacket(INT8U *txBuffer, INT8U size)
477 //输入:发送的缓冲区,发送数据个数
478 //输出:无
479 //功能描述:CC1100发送一组数据
480 //*****************************************************************************************
481
482 void halRfSendPacket(INT8U *txBuffer, INT8U size)
483 {
484 1 halSpiWriteReg(CCxxx0_TXFIFO, size);
485 1 halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
486 1
487 1 halSpiStrobe(CCxxx0_STX); //进入发送模式发送数据
C51 COMPILER V7.06 1100 12/18/2007 19:48:16 PAGE 9
488 1
489 1 // Wait for GDO0 to be set -> sync transmitted
490 1 while (!GDO0);
491 1 // Wait for GDO0 to be cleared -> end of packet
492 1 while (GDO0);
493 1 halSpiStrobe(CCxxx0_SFTX);
494 1 }
495 //*****************************************************************************************
496 void setRxMode(void)
497 {
498 1 halSpiStrobe(CCxxx0_SRX); //进入接收状态
499 1 }
500 //*****************************************************************************************
501 INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length)
502 {
503 1 INT8U status[2];
504 1 INT8U packetLength;
505 1 INT8U i=(*length)*4; // 具体多少要根据datarate和length来决定
506 1
507 1 halSpiStrobe(CCxxx0_SRX); //进入接收状态
508 1 delay(2);
509 1 while (GDO0)
510 1 {
511 2 delay(2);
512 2 --i;
513 2 if(i<1)
514 2 return 0;
515 2 }
516 1 if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
517 1 {
518 2 packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
519 2 if (packetLength <= *length) //如果所要的有效数据长度小于等于接收到的数据包的长度
520 2 {
521 3 halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
522 3 *length = packetLength; //把接收数据长度的修改为当前数据的长度
523 3 halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); //读出CRC校验位
524 3 halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
525 3 return (status[1] & CRC_OK); //如果校验成功返回接收成功
526 3 }
527 2 else
528 2 {
529 3 *length = packetLength;
530 3 halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
531 3 return 0;
532 3 }
533 2 }
534 1 else
535 1 return 0;
536 1 }
537 //*****************************************************************************************
538 void disdignit()
539 {
540 1 P0=seg[qian];
541 1 led3=0;
542 1 delay(80);
543 1 led3=1;
544 1 //-------------------------------------------------------------
545 1 P0=seg[ge];
546 1 led0=0;
547 1 delay(80);
548 1 led0=1;
549 1 //-----------------------------------------------------------
C51 COMPILER V7.06 1100 12/18/2007 19:48:16 PAGE 10
550 1 P0=seg[shi];
551 1 led1=0;
552 1 delay(80);
553 1 led1=1;
554 1 //-----------------------------------------------
555 1 P0=seg[bai];
556 1 led2=0;
557 1 delay(80);
558 1 led2=1;
559 1 }
560 //*****************************************************************************************
561 void main(void)
562 {
563 1 INT8U leng =0;
564 1 INT8U tf =0;
565 1 INT8U TxBuf[8]={0}; // 8字节, 如果需要更长的数据包,请正确设置
566 1 INT8U RxBuf[8]={0};
567 1 CpuInit();
568 1 POWER_UP_RESET_CC1100(); //1100复位
569 1 halRfWriteRfSettings(); //寄存其配置
570 1 halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);
571 1 led1 = 1;
572 1 led2 = 1;
573 1 led3 = 1;
574 1 TxBuf[1] = 1 ;
575 1 TxBuf[2] = 1 ;
576 1 halRfSendPacket(TxBuf,8); // Transmit Tx buffer data
577 1 delay(6000);
578 1 while(1)
579 1 {
580 2 if(halRfReceivePacket(RxBuf,&leng))
581 2 {
582 3
583 3 if( RxBuf[1]==1)
584 3 {
585 4 count0++;
586 4 }
587 3 if( RxBuf[2]==1)
588 3 {
589 4 count0--;
590 4 }
591 3 qian=count0/1000;
592 3 bai=count0%1000/100;
593 3 shi=count0%1000%100/10;
594 3 ge=count0%1000%100%10;
595 3 delay(1000);
596 3 }
597 2 disdignit();
598 2 }
599 1
600 1 }
601
602
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1083 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 63 38
IDATA SIZE = ---- ----
C51 COMPILER V7.06 1100 12/18/2007 19:48:16 PAGE 11
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 + -