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

📄 1100.lst

📁 无线模块cc1101学习资料
💻 LST
📖 第 1 页 / 共 3 页
字号:
 502   1          halSpiWriteReg(CCxxx0_IOCFG2,   rfSettings.IOCFG2);
 503   1          halSpiWriteReg(CCxxx0_IOCFG0,   rfSettings.IOCFG0);    
 504   1          halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
 505   1          halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
 506   1          halSpiWriteReg(CCxxx0_ADDR,     rfSettings.ADDR);
 507   1          halSpiWriteReg(CCxxx0_PKTLEN,   rfSettings.PKTLEN);
 508   1      }
 509          
 510          //*****************************************************************************************
 511          //函数名:void halRfSendPacket(INT8U *txBuffer, INT8U size)
 512          //输入:发送的缓冲区,发送数据个数
 513          //输出:无
 514          //功能描述:CC1100发送一组数据
 515          //*****************************************************************************************
 516          
 517          void halRfSendPacket(INT8U *txBuffer, INT8U size) 
 518          {
 519   1              halSpiWriteReg(CCxxx0_TXFIFO, size);
 520   1          halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
 521   1      
 522   1          halSpiStrobe(CCxxx0_STX);           //进入发送模式发送数据
 523   1      
 524   1          // Wait for GDO0 to be set -> sync transmitted
 525   1          while (!GDO0);
 526   1          // Wait for GDO0 to be cleared -> end of packet
 527   1          while (GDO0);
 528   1              halSpiStrobe(CCxxx0_SFTX);
 529   1      }
 530          
 531          
 532          void setRxMode(void)
 533          {
 534   1          halSpiStrobe(CCxxx0_SRX);           //进入接收状态
 535   1      }
 536          INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length) 
 537          {
 538   1          INT8U status[2];
 539   1          INT8U packetLength;
 540   1              INT8U i=(*length)*4;  // 具体多少要根据datarate和length来决定
 541   1      
 542   1          halSpiStrobe(CCxxx0_SRX);           //进入接收状态
 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/19/2007 21:21:42 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 ds_reset(void)
 576          {
 577   1              char temp=1;
 578   1              while(temp)
 579   1      {
 580   2       while(temp)
 581   2      {
 582   3          DQ=1;_nop_();_nop_();
 583   3              DQ=0;
 584   3              delay1(80);
 585   3              DQ=1;
 586   3              delay1(9);
 587   3              temp=DQ;
 588   3        } 
 589   2              delay1(64);
 590   2              temp=~DQ;  
 591   2      }
 592   1      DQ=1;
 593   1      }
 594          //*****************************************************************************************
 595           void delay1(   INT16U i)
 596          {
 597   1              for(;i>0;i--);   
 598   1      }
 599          //*****************************************************************************************
 600          void write_byte(INT8U value)
 601          {
 602   1              INT8U i;
 603   1              for(i=8;i>0;i--)
 604   1      {
 605   2              DQ=1;_nop_();_nop_();
 606   2              DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();
 607   2              DQ=value&0x01;
 608   2              delay1(9);
 609   2          value>>=1;
 610   2      } 
 611   1              DQ=1;
C51 COMPILER V7.06   1100                                                                  12/19/2007 21:21:42 PAGE 11  

 612   1              delay1(1);
 613   1      }
 614          //*****************************************************************************************
 615          INT8U read_byte(void)
 616          {
 617   1              INT8U i;
 618   1              INT8U value1=0;
 619   1      for(i=8;i>0;i--)
 620   1      {
 621   2              DQ=1;_nop_();_nop_();
 622   2              value1>>=1;
 623   2              DQ=0;
 624   2              _nop_();_nop_();_nop_();_nop_();
 625   2              DQ=1;
 626   2              _nop_();_nop_();_nop_();_nop_();
 627   2              if(DQ) 
 628   2              value1|=0x80;
 629   2              delay1(9);
 630   2      }
 631   1              DQ=1;
 632   1              return(value1);
 633   1      }
 634          //*****************************************************************************************
 635          void read_temp()
 636          {
 637   1              ds_reset();
 638   1              write_byte(0xcc);
 639   1              write_byte(0xbe);
 640   1              temp_data[0]=read_byte();
 641   1              temp_data[1]=read_byte();
 642   1              ds_reset();
 643   1              write_byte(0xcc);
 644   1              write_byte(0x44);
 645   1      }
 646          //*****************************************************************************************
 647          void work_temp()
 648          {
 649   1              INT8U n=0;
 650   1      if(temp_data[1]>127)
 651   1              {
 652   2              temp_data[1]=(256-temp_data[1]);                        //负值
 653   2              temp_data[0]=(256-temp_data[0]);
 654   2              n=1;
 655   2              }
 656   1              dispaly[6]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
 657   1              dispaly[5]=dispaly[6]/100;                              //百位
 658   1              dispaly[4]=dispaly[6]%100;                              //
 659   1              dispaly[2]=dispaly[4]/10;                               //十位
 660   1              dispaly[1]=dispaly[4]%10;                               //个位  
 661   1              switch  (temp_data[0]&0x0f)                             //小数位
 662   1              {
 663   2              case 0x0f:dispaly[0]=9;break;
 664   2              case 0x0e:dispaly[0]=9;break;
 665   2              case 0x0d:dispaly[0]=8;break;
 666   2              case 0x0c:dispaly[0]=8;break;
 667   2              case 0x0b:dispaly[0]=7;break;
 668   2              case 0x0a:dispaly[0]=6;break;
 669   2              case 0x09:dispaly[0]=6;break;
 670   2              case 0x08:dispaly[0]=5;break;
 671   2              case 0x07:dispaly[0]=4;break;
 672   2              case 0x06:dispaly[0]=4;break;
 673   2              case 0x05:dispaly[0]=3;break;
C51 COMPILER V7.06   1100                                                                  12/19/2007 21:21:42 PAGE 12  

 674   2              case 0x04:dispaly[0]=3;break;
 675   2              case 0x03:dispaly[0]=2;break;
 676   2              case 0x02:dispaly[0]=1;break;
 677   2              case 0x01:dispaly[0]=1;break;
 678   2              case 0x00:dispaly[0]=1;break;
 679   2              default:break;
 680   2              }
 681   1      if(n)                                                                           //负值时显示aa,正直显示dd
 682   1              {
 683   2              dispaly[3]=0x11;                                                //
 684   2              }
 685   1      else    dispaly[3]=0x22;
 686   1      }
 687          //*****************************************************************************************
 688          void disdignit()
 689          {
 690   1              char i;
 691   1      //      if(temp[0])
 692   1              {
 693   2              for(i=0;i<3;i++)
 694   2                      {
 695   3                              P0=0xC6;
 696   3                              led0=0;
 697   3                              delay1(40);
 698   3                              led0=1;
 699   3                              P0=seg[dispaly[0]];
 700   3                              led1=0;
 701   3                              delay1(40);
 702   3                              led1=1;
 703   3                                      P0=seg1 [dispaly[1]];
 704   3                                      led2=0;
 705   3                              delay1(40);
 706   3                              led2=1;
 707   3                                      P0=seg[ dispaly[2]];
 708   3                              led3=0;
 709   3                                      delay1(40);
 710   3                                      led3=1;
 711   3                              }
 712   2                              }
 713   1      }
 714          void main(void)
 715          {
 716   1              INT8U leng =0;
 717   1              INT8U tf =0;
 718   1              INT8U TxBuf[8]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};        // 8字节, 如果需要更长的数据包,请正确设置
 719   1              INT8U RxBuf[8]={0};     
 720   1              CpuInit();
 721   1              POWER_UP_RESET_CC1100();
 722   1              halRfWriteRfSettings();
 723   1              halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);
 724   1      //      halRfSendPacket(TxBuf,8);       // Transmit Tx buffer data
 725   1              delay(6000);
 726   1              while(1)
 727   1              {
 728   2                      read_temp();
 729   2                      work_temp();
 730   2                      delay1(500);
 731   2                      disdignit();
 732   2                      halRfSendPacket(dispaly,4);
 733   2              //      delay1(1000);
 734   2      //      leng=8;
 735   2      //      halRfSendPacket(TxBuf,leng);    // Transmit Tx buffer data
C51 COMPILER V7.06   1100                                                                  12/19/2007 21:21:42 PAGE 13  

 736   2              }
 737   1              
 738   1      }
 739          
 740          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1338    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     73      38
   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 + -