📄 1100.lst
字号:
492 1 halSpiWriteReg(CCxxx0_IOCFG2, rfSettings.IOCFG2);
493 1 halSpiWriteReg(CCxxx0_IOCFG0, rfSettings.IOCFG0);
494 1 halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
495 1 halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
496 1 halSpiWriteReg(CCxxx0_ADDR, rfSettings.ADDR);
497 1 halSpiWriteReg(CCxxx0_PKTLEN, rfSettings.PKTLEN);
498 1 }
499
500 //*****************************************************************************************
501 //函数名:void halRfSendPacket(INT8U *txBuffer, INT8U size)
502 //输入:发送的缓冲区,发送数据个数
503 //输出:无
504 //功能描述:CC1100发送一组数据
505 //*****************************************************************************************
506
507 void halRfSendPacket(INT8U *txBuffer, INT8U size)
508 {
509 1 halSpiWriteReg(CCxxx0_TXFIFO, size);
510 1 halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
511 1
512 1 halSpiStrobe(CCxxx0_STX); //进入发送模式发送数据
513 1
514 1 // Wait for GDO0 to be set -> sync transmitted
515 1 while (!GDO0);
516 1 // Wait for GDO0 to be cleared -> end of packet
517 1 while (GDO0);
518 1 halSpiStrobe(CCxxx0_SFTX);
519 1 }
520
521
522 void setRxMode(void)
523 {
524 1 halSpiStrobe(CCxxx0_SRX); //进入接收状态
525 1 }
526
527 /*
528 // Bit masks corresponding to STATE[2:0] in the status byte returned on MISO
529 #define CCxx00_STATE_BM 0x70
530 #define CCxx00_FIFO_BYTES_AVAILABLE_BM 0x0F
531 #define CCxx00_STATE_TX_BM 0x20
532 #define CCxx00_STATE_TX_UNDERFLOW_BM 0x70
533 #define CCxx00_STATE_RX_BM 0x10
534 #define CCxx00_STATE_RX_OVERFLOW_BM 0x60
535 #define CCxx00_STATE_IDLE_BM 0x00
536
537 static INT8U RfGetRxStatus(void)
538 {
539 INT8U temp, spiRxStatus1,spiRxStatus2;
540 INT8U i=4;// 循环测试次数
541 temp = CCxxx0_SNOP|READ_SINGLE;//读寄存器命令
542 CSN = 0;
543 while (MISO);
544 SpiTxRxByte(temp);
545 spiRxStatus1 = SpiTxRxByte(0);
546 do
547 {
548 SpiTxRxByte(temp);
549 spiRxStatus2 = SpiTxRxByte(0);
C51 COMPILER V7.06 1100 12/20/2007 00:09:01 PAGE 10
550 if(spiRxStatus1 == spiRxStatus2)
551 {
552 if( (spiRxStatus1 & CCxx00_STATE_BM) == CCxx00_STATE_RX_OVERFLOW_BM)
553 {
554 halSpiStrobe(CCxxx0_SFRX);
555 return 0;
556 }
557 return 1;
558 }
559 spiRxStatus1=spiRxStatus2;
560 }
561 while(i--);
562 CSN = 1;
563 return 0;
564 }
565 */
566 INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length)
567 {
568 1 INT8U status[2];
569 1 INT8U packetLength;
570 1 INT8U i=(*length)*4; // 具体多少要根据datarate和length来决定
571 1
572 1 halSpiStrobe(CCxxx0_SRX); //进入接收状态
573 1 //delay(5);
574 1 //while (!GDO1);
575 1 //while (GDO1);
576 1 delay(2);
577 1 while (GDO0)
578 1 {
579 2 delay(2);
580 2 --i;
581 2 if(i<1)
582 2 return 0;
583 2 }
584 1 if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
585 1 {
586 2 packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
587 2 if (packetLength <= *length) //如果所要的有效数据长度小于等于接收到的数据包的长度
588 2 {
589 3 halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
590 3 *length = packetLength; //把接收数据长度的修改为当前数据的长度
591 3
592 3 // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
593 3 halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); //读出CRC校验位
594 3 halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
595 3 return (status[1] & CRC_OK); //如果校验成功返回接收成功
596 3 }
597 2 else
598 2 {
599 3 *length = packetLength;
600 3 halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
601 3 return 0;
602 3 }
603 2 }
604 1 else
605 1 return 0;
606 1 }
607 //--------------------------------------------------------------------------------------------------
608 // 函数名称: UART_init()串口初始化函数
609 // 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
610 // 串口接收中断允许,发送中断禁止
611 //--------------------------------------------------------------------------------------------------
C51 COMPILER V7.06 1100 12/20/2007 00:09:01 PAGE 11
612 void UART_init()
613 {
614 1 //初始化串行口和波特率发生器
615 1 SCON =0x58; //选择串口工作方式,打开接收允许
616 1 TMOD =0x21; //定时器1工作在方式2,定时器0工作在方式1
617 1 TH1 =0xfd; //实现波特率9600(系统时钟11.0592MHZ)
618 1 TL1 =0xfd;
619 1 TR1 =1; //启动定时器T1
620 1 ET1 =0;
621 1 ES=1; //允许串行口中断
622 1 PS=1; //设计串行口中断优先级
623 1 EA =1; //单片机中断允许
624 1 }
625 //--------------------------------------------------------------------------------------------------
626 // 函数名称: com_interrup()串口接收中断处理函数
627 // 函数功能: 接收包括起始位'S'在内的十位数据到数据缓冲区
628 //--------------------------------------------------------------------------------------------------
629 com_interrupt(void) interrupt 4 using 3
630 {
631 1 // char RECEIVR_buffer;
632 1 if(RI) //处理接收中断
633 1 {
634 2 RI=0; //清除中断标志位
635 2 KEY0=SBUF;
636 2 SBUF=KEY0;
637 2 }
638 1 }
639 //*************************************************************************************
640 void main(void)
641 {
642 1 INT8U i,leng =4;
643 1 INT8U tf =0;
644 1 INT8U TxBuf[4]={0}; // 8字节, 如果需要更长的数据包,请正确设置
645 1 INT8U RxBuf[4]={0};
646 1 CpuInit();
647 1 POWER_UP_RESET_CC1100();
648 1 halRfWriteRfSettings();
649 1 halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);
650 1 delay(6000);
651 1 P0=0xBF;
652 1 led0=0;led1=0;led2=0;led3=0;
653 1 // UART_init();
654 1 while(1)
655 1 {
656 2
657 2 if(halRfReceivePacket(RxBuf,&leng))
658 2 {
659 3 if(RxBuf[0]==0x01)
660 3 {
661 4 P0=seg[0];
662 4 led0=1;led1=1;led2=1;led3=0;
663 4 delay1(50);
664 4 }
665 3
666 3 if(RxBuf[0]==0x11)
667 3 {
668 4 P0=seg[1];
669 4 led0=1;led1=1;led2=0;led3=1;
670 4 delay1(50);
671 4 }
672 3 if(RxBuf[0]==0x21)
673 3 {
C51 COMPILER V7.06 1100 12/20/2007 00:09:01 PAGE 12
674 4 P0=seg[2];
675 4 led0=1;led1=0;led2=1;led3=1;
676 4 delay1(50);
677 4 }
678 3 if(RxBuf[0]==0x31)
679 3 {
680 4 P0=seg[3];
681 4 led0=0;led1=1;led2=1;led3=1;
682 4 delay1(50);
683 4 }
684 3 if(RxBuf[0]==0x41)
685 3 {
686 4 P0=seg[4];
687 4 led0=1;led1=1;led2=1;led3=0;
688 4 delay1(50);
689 4 }
690 3 if(RxBuf[0]==0x51)
691 3 {
692 4 P0=seg[5];
693 4 led0=1;led1=1;led2=0;led3=1;
694 4 delay1(50);
695 4 }
696 3 if(RxBuf[0]==0x61)
697 3 {
698 4 P0=seg[6];
699 4 led0=1;led1=0;led2=1;led3=1;
700 4 delay1(50);
701 4 }
702 3 if(RxBuf[0]==0x71)
703 3 {
704 4 P0=seg[7];
705 4 led0=0;led1=1;led2=1;led3=1;
706 4 delay1(50);
707 4 }
708 3 if(RxBuf[0]==0x81)
709 3 {
710 4 P0=seg[8];
711 4 led0=1;led1=1;led2=1;led3=0;
712 4 delay1(50);
713 4 }
714 3 if(RxBuf[0]==0x91)
715 3 {
716 4 P0=seg[9];
717 4 led0=1;led1=1;led2=0;led3=1;
718 4 delay1(50);
719 4 }
720 3 // RxBuf[1] = 0xff;
721 3 // RxBuf[2] = 0xff;
722 3 }
723 2
724 2 }
725 1 }
*** WARNING C280 IN LINE 642 OF 1100.C: 'i': unreferenced local variable
726
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1104 ----
CONSTANT SIZE = 8 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 54 31
C51 COMPILER V7.06 1100 12/20/2007 00:09:01 PAGE 13
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -