⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1100.lst

📁 无线模块cc1101学习资料
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -