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

📄 1100.lst

📁 无线模块cc1101学习资料
💻 LST
📖 第 1 页 / 共 3 页
字号:
 440          
 441          
 442          //*****************************************************************************************
 443          //函数名:INT8U halSpiReadReg(INT8U addr)
 444          //输入:地址
 445          //输出:该状态寄存器当前值
 446          //功能描述:SPI读状态寄存器
 447          //*****************************************************************************************
 448          INT8U halSpiReadStatus(INT8U addr) 
 449          {
 450   1          INT8U value,temp;
 451   1              temp = addr | READ_BURST;               //写入要读的状态寄存器的地址同时写入读命令
 452   1          CSN = 0;
 453   1          while (MISO);
 454   1          SpiTxRxByte(temp);
 455   1              value = SpiTxRxByte(0);
 456   1              CSN = 1;
 457   1              return value;
 458   1      }
 459          //*****************************************************************************************
 460          //函数名:void halRfWriteRfSettings(RF_SETTINGS *pRfSettings)
 461          //输入:无
 462          //输出:无
 463          //功能描述:配置CC1100的寄存器
 464          //*****************************************************************************************
 465          void halRfWriteRfSettings(void) 
 466          {
 467   1      
 468   1              halSpiWriteReg(CCxxx0_FSCTRL0,  rfSettings.FSCTRL2);//自已加的
 469   1          // Write register settings
 470   1          halSpiWriteReg(CCxxx0_FSCTRL1,  rfSettings.FSCTRL1);
 471   1          halSpiWriteReg(CCxxx0_FSCTRL0,  rfSettings.FSCTRL0);
 472   1          halSpiWriteReg(CCxxx0_FREQ2,    rfSettings.FREQ2);
 473   1          halSpiWriteReg(CCxxx0_FREQ1,    rfSettings.FREQ1);
 474   1          halSpiWriteReg(CCxxx0_FREQ0,    rfSettings.FREQ0);
 475   1          halSpiWriteReg(CCxxx0_MDMCFG4,  rfSettings.MDMCFG4);
 476   1          halSpiWriteReg(CCxxx0_MDMCFG3,  rfSettings.MDMCFG3);
 477   1          halSpiWriteReg(CCxxx0_MDMCFG2,  rfSettings.MDMCFG2);
 478   1          halSpiWriteReg(CCxxx0_MDMCFG1,  rfSettings.MDMCFG1);
 479   1          halSpiWriteReg(CCxxx0_MDMCFG0,  rfSettings.MDMCFG0);
 480   1          halSpiWriteReg(CCxxx0_CHANNR,   rfSettings.CHANNR);
 481   1          halSpiWriteReg(CCxxx0_DEVIATN,  rfSettings.DEVIATN);
 482   1          halSpiWriteReg(CCxxx0_FREND1,   rfSettings.FREND1);
 483   1          halSpiWriteReg(CCxxx0_FREND0,   rfSettings.FREND0);
 484   1          halSpiWriteReg(CCxxx0_MCSM0 ,   rfSettings.MCSM0 );
 485   1          halSpiWriteReg(CCxxx0_FOCCFG,   rfSettings.FOCCFG);
 486   1          halSpiWriteReg(CCxxx0_BSCFG,    rfSettings.BSCFG);
 487   1          halSpiWriteReg(CCxxx0_AGCCTRL2, rfSettings.AGCCTRL2);
C51 COMPILER V7.06   1100                                                                  12/20/2007 00:50:10 PAGE 9   

 488   1              halSpiWriteReg(CCxxx0_AGCCTRL1, rfSettings.AGCCTRL1);
 489   1          halSpiWriteReg(CCxxx0_AGCCTRL0, rfSettings.AGCCTRL0);
 490   1          halSpiWriteReg(CCxxx0_FSCAL3,   rfSettings.FSCAL3);
 491   1              halSpiWriteReg(CCxxx0_FSCAL2,   rfSettings.FSCAL2);
 492   1              halSpiWriteReg(CCxxx0_FSCAL1,   rfSettings.FSCAL1);
 493   1          halSpiWriteReg(CCxxx0_FSCAL0,   rfSettings.FSCAL0);
 494   1          halSpiWriteReg(CCxxx0_FSTEST,   rfSettings.FSTEST);
 495   1          halSpiWriteReg(CCxxx0_TEST2,    rfSettings.TEST2);
 496   1          halSpiWriteReg(CCxxx0_TEST1,    rfSettings.TEST1);
 497   1          halSpiWriteReg(CCxxx0_TEST0,    rfSettings.TEST0);
 498   1          halSpiWriteReg(CCxxx0_IOCFG2,   rfSettings.IOCFG2);
 499   1          halSpiWriteReg(CCxxx0_IOCFG0,   rfSettings.IOCFG0);    
 500   1          halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
 501   1          halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
 502   1          halSpiWriteReg(CCxxx0_ADDR,     rfSettings.ADDR);
 503   1          halSpiWriteReg(CCxxx0_PKTLEN,   rfSettings.PKTLEN);
 504   1      }
 505          
 506          //*****************************************************************************************
 507          //函数名:void halRfSendPacket(INT8U *txBuffer, INT8U size)
 508          //输入:发送的缓冲区,发送数据个数
 509          //输出:无
 510          //功能描述:CC1100发送一组数据
 511          //*****************************************************************************************
 512          
 513          void halRfSendPacket(INT8U *txBuffer, INT8U size) 
 514          {
 515   1              halSpiWriteReg(CCxxx0_TXFIFO, size);
 516   1          halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
 517   1      
 518   1          halSpiStrobe(CCxxx0_STX);           //进入发送模式发送数据
 519   1      
 520   1          // Wait for GDO0 to be set -> sync transmitted
 521   1          while (!GDO0);
 522   1          // Wait for GDO0 to be cleared -> end of packet
 523   1          while (GDO0);
 524   1              halSpiStrobe(CCxxx0_SFTX);
 525   1      }
 526          
 527          
 528          void setRxMode(void)
 529          {
 530   1          halSpiStrobe(CCxxx0_SRX);           //进入接收状态
 531   1      }
 532          //---------------------------------------------------------------------------
 533          INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length) 
 534          {
 535   1          INT8U status[2];
 536   1          INT8U packetLength;
 537   1              INT8U i=(*length)*4;  // 具体多少要根据datarate和length来决定
 538   1      
 539   1          halSpiStrobe(CCxxx0_SRX);           //进入接收状态
 540   1              //delay(5);
 541   1          //while (!GDO1);
 542   1          //while (GDO1);
 543   1              delay(2);
 544   1              while (GDO0)
 545   1              {
 546   2                      delay(2);
 547   2                      --i;
 548   2                      if(i<1)
 549   2                         return 0;        
C51 COMPILER V7.06   1100                                                                  12/20/2007 00:50:10 PAGE 10  

 550   2              }        
 551   1          if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
 552   1              {
 553   2              packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
 554   2              if (packetLength <= *length)            //如果所要的有效数据长度小于等于接收到的数据包的长度
 555   2                      {
 556   3                  halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
 557   3                  *length = packetLength;                             //把接收数据长度的修改为当前数据的长度
 558   3              
 559   3                  // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
 560   3                  halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2);       //读出CRC校验位
 561   3                              halSpiStrobe(CCxxx0_SFRX);              //清洗接收缓冲区
 562   3                  return (status[1] & CRC_OK);                        //如果校验成功返回接收成功
 563   3              }
 564   2                       else 
 565   2                      {
 566   3                  *length = packetLength;
 567   3                  halSpiStrobe(CCxxx0_SFRX);          //清洗接收缓冲区
 568   3                  return 0;
 569   3              }
 570   2          } 
 571   1              else
 572   1              return 0;
 573   1      }
 574          //*****************************************************************************************
 575          void disdignit()
 576          {
 577   1              char i;
 578   1              if(temp[0])
 579   1              {
 580   2              for(i=0;i<3;i++)
 581   2                      {
 582   3                              P0=0xC6;
 583   3                              led0=0;
 584   3                              delay1(40);
 585   3                              led0=1;
 586   3                              P0=seg[temp[1]];
 587   3                              led1=0;
 588   3                              delay1(40);
 589   3                              led1=1;
 590   3                                      P0=seg1[temp[5]];
 591   3                                      led2=0;
 592   3                              delay1(40);
 593   3                              led2=1;
 594   3                                      P0=seg[temp[4]];
 595   3                              led3=0;
 596   3                                      delay1(40);
 597   3                                      led3=1;
 598   3                              }
 599   2                              }
 600   1      }
 601          //********************************************************************************
 602          void StartUART( void )
 603          {                                                       //波特率4800
 604   1           SCON = 0x50;
 605   1           TMOD = 0x20;
 606   1           TH1 = 0xFA;
 607   1           TL1 = 0xFA;
 608   1           PCON = 0x00;
 609   1           TR1 = 1;
 610   1      }
 611          void R_S_Byte(INT8U R_Byte)
C51 COMPILER V7.06   1100                                                                  12/20/2007 00:50:10 PAGE 11  

 612          {       
 613   1               SBUF = R_Byte;  
 614   1           while( TI == 0 );                          //查询法
 615   1               TI = 0;
 616   1           
 617   1      }
 618          void main(void)
 619          {
 620   1              INT8U i,leng =0;
 621   1              INT8U RxBuf[8]={0};     // 8字节, 如果需要更长的数据包,请正确设置
 622   1              CpuInit();
 623   1              POWER_UP_RESET_CC1100();
 624   1              halRfWriteRfSettings();
 625   1              halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);//发射功率设置
 626   1              delay(6000);
 627   1              StartUART();
 628   1              while(1)
 629   1              {
 630   2                      leng =4; // 预计接受8 bytes
 631   2                      if(halRfReceivePacket(RxBuf,&leng))  //判断是否接收到数据
 632   2                      {
 633   3                      temp[0]=RxBuf[3];      //符号位
 634   3                      temp[2]=((RxBuf[2]<<4)|RxBuf[1]);               //整数位
 635   3                      temp[1]=RxBuf[0];                                                       //小数位
 636   3                      temp[4]=RxBuf[2];                                                       //十位
 637   3                      temp[5]=RxBuf[1];
 638   3                      for(i=0;i<3;i++)
 639   3                      {
 640   4                      R_S_Byte(temp[2-i])     ;       
 641   4                      delay(100);
 642   4                      }
 643   3                       disdignit();
 644   3                      }
 645   2              }
 646   1              
 647   1      }
 648          
 649          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1015    ----
   CONSTANT SIZE    =      8    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     79      29
   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 + -