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

📄 +̤

📁 使用CC1101无线模块进行多机通信
💻
📖 第 1 页 / 共 2 页
字号:
{
     WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
      //************************************************************************************
      // Config bitbang pins
      P1DIR |= SPI_SIMO + SPI_CLK + CSn_PIN + BIT6;      //CS   CLK   SIMO(GDO1)为输出
      P1DIR &= ~( SPI_SOMI +GDO0_PIN);  //SOMI GDO0 GDO2 SW  为输入   
  
      P1OUT &= ~(SPI_SIMO  + SPI_CLK ) ;                         //CLK =0,SPI_SIMO= 0;                                                    
     //*************************************************************************
      P1OUT |= CSn_PIN;       //CSn_PIN =1    
      P4DIR|=BIT0+BIT1;
      P4OUT|=BIT0+BIT1;
      
}


const unsigned char ConfigurationCCxxx0_433[47]=
{
 //Data	:Reg:       Name (x = non-default)
0x29, 	//00	  IOCFG2 (x)
0x2E,   //01	  IOCFG1
0x06,		//02    IOCFG0D (x) 

0x47,   //03		FIFOTHR (x)
0xD3,   //04    SYNC1
0x91,   //05    SYNC0

LENGTH, //06		PKTLEN (x) 			//最大长度  PKTLEN (x) 
0x04,		//07   	PKTCTRL1 (x)   	//有地址,广播地址为0x00
0x05,   //08	 	PKTCTRL0 (x)    //  CRC calculation in TX and CRC check in RX enabled  
                                       //可变长度
                              
0x00,   //09		ADDR (x)  			//设自己的地址
0x00,   //0A	  CHANNR (x)

0x06,		//0B	  FSCTRL1 (x)  		//*电流与灵敏度有关     IF Frequency -> FREQ_IF[4:0] => 152.34 kHz
0x00,   //0C		FSCTRL0 (x)

0x10,   //0D		FREQ2 (x)     
0xa7,   //0E		FREQ1 (x)     	//f = 432.999817@0x10a762
0x62,   //0F		FREQ0 (x)     

0xCA,   //10		MDMCFG4 (x)
0x83,   //11		MDMCFG3 (x)
0x12,   //12    MDMCFG2 (x)    " 12 == 16/16 sync word bits detected  "
0x22,   //13		MDMCFG1 (x)    "  Number of preamble bytes == 4"
0xF8,   //14		MDMCFG0 (x)
0x34,   //15		DEVIATN (x)
//**************************************************************************************************************************************************************
0x07, 	//16		MCSM2     
														   	//*低功耗有关   2008-05-24  改为0x13
														  	// "bit4(RX_TIME_RSSI) ==1  is Direct RX termination based on RSSI measurement (carrier sense)."
														           // ==1  :使能载波检测,即没有载波信号时,立即退出RX状态
														           // ==0 : 直到RX_TIME溢出,退出RX状态
														  	// "bit3(RX_TIME_QUAL) ==1  is When the RX_TIME timer expires,the chip checks if either sync word is found or PQI is set.
														                      // ==0  is .............................., the chip checks if sync word is found.
														          //==1: RX_TIME溢出时如果收到 sync word 或者PQI is set,则继续接收 ,否则退出接收状态
														          //==0: RX_TIME溢出时如果收到 sync word,则继续接收 ,否则退出接收状态  2008-05-24改为0
														  	// "bit2--0 == 6 :  0.195% @ WOR_RES=0"
														   	// "bit2--0 == 3 :  2.441ppm @ WOR_RES=1"
//*************************************************************************************************************
0x30,   //17		MCSM1           //接收和发射后进入空闲状态
                                    
0x18,   //18    MCSM0 (x)     	// 0x18  == Calibration from IDLE to TX/Rx
0x16,   //19		FOCCFG (x)
0x6C,   //1A		BSCFG (x)
//****************************************************************************************************
0x43,   //1B		AGCCTRL2 (x)
										      			//bit7-6 ( MAX_DVGA_GAIN[1:0] ) == 01:  The highest gain setting can not be used
										      			//bit5-3 ( MAX_LNA_GAIN[2:0] ) == 000:   Maximum possible LNA + LNA 2 gain
										      			//bit2-0 ( MAGN_TARGET[2:0] )  == 011:  33 dB  == Target amplitude from channel filter
//******************************************************************************************************
0x40,		//1C		AGCCTRL1 (x)
														   //bit7  == 0:   固定为0
														   //bit6  == 1:   固定为1
														   //bit5-4 ( CARRIER_SENSE_REL_THR[1:0] ) == 00 :   Relative carrier sense threshold disabled
														   //bit3-0 ( CARRIER_SENSE_ABS_THR[3:0] ) == 011 :   3 dB above MAGN_TARGET setting
														                //当大于 " MAGN_TARGET setting " 3dB 时 ,表示有载波
														   //2008-05-20改为0x10  先测试
//****************************************************************************************************
0x91,   //1D		AGCCTRL0 (x)

0x0a,//0xff,   //1E		WOREVT1 //  t_E0 = (750/26000000)*EVT0  = 1890.4ms
0x94,//0xff,   //1F		WOREVT0 //  t_E0 = (750/26000000)*EVT0 *32 = 2500ms  2008-05-24
//**************************************************************************************************
0x39,//0x38,   //20		WORCTRL    
													    //bit7 ==0: 使能RC, When written to 0, automatic initial  calibration will be performed,
													    //bit6-4:   EVENT1[]= 3  is  12  
													    //bit3 ==1:  Enables the RC oscillator calibration.
													    //bit2-0 == 0:   WOR_RES=0
													    //bit2-0 == 1:   WOR_RES=1   2008-05-24
//*************************************************************************************************
0x56,   //21		FREND1 (x)
0x10,   //22		FREND0 (x)   //选择功率使用的pdat值//!!!出错会引起输出功率为0

0xE9,   //23		FSCAL3 (x)
0x2A,   //24		FSCAL2 (x)
0x00,   //25		FSCAL1 (x)
0x1F,   //26		FSCAL0 (x)

0x41,   //27		RCCTRL1
0x00,   //28		RCCTRL0
0x59,   //29		FSTEST (x)
0x7F,   //2A		PTEST

0x3F,   //2B		AGCTST
0x81,   //2C		TEST2 (x)
0x35,   //2D		TEST1 (x)
0x09    //2E		TEST0 (x)

};
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
void writeRFSettings(void)
{
  unsigned char i;
  for(i=0; i<47; i++)
  {
      SPIWriteReg(i,ConfigurationCCxxx0_433[i]);
  }
}


unsigned char txBuffer[LENGTH+2];
char x;

//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
//void TxData(unsigned length,unsigned char x)  
  void TxData(unsigned char x)
{
    //发送数据格式--------------------------------------------------------------
    //    数据长度    地址      实际数据
    //--------------------------------------------------------------------------
    //unsigned i;
    unsigned int length=4;
    P1IE &= ~GDO0_PIN;   //关闭GDO0中断 
    //--------------------------------------------------------------------------
    txBuffer[0] = 5;  //数据长度 == (数据+地址)
    txBuffer[1] = 1;
    txBuffer[2] = ADDR_VAL1;
   // for(i=3; i<length+1; i++ )
   // {
     	txBuffer[3] = x;  //数据
  //  }
    //--------------------------------------------------------------------------
    SPIStrobe(CCxxx0_SFTX);     //刷新cc1101的buffer; 
    SPIWriteBurstReg(CCxxx0_TXFIFO, txBuffer, length+1); //写数据到cc1101的buffer;  
    SPIStrobe(CCxxx0_STX);      // 进入发射状态
    while (!( P1IN& GDO0_PIN)); // 等待GDO0置高,置高表示数据报头已经发送                                 
    while ( P1IN& GDO0_PIN);    // 等待GDO0置低,置低表示数据报已经发送完成
    
   // P1IFG &= ~GDO0_PIN;        // After pkt TX, this flag is set, Clear it.
   // P1IE |= GDO0_PIN;//开GDO0中断     
    
    SPIStrobe(CCxxx0_SIDLE);// 进入空闲状态
}

unsigned int Temp;

void main (void)
{
//unsigned char len;
    Initialize_CPU();
    
    //-------------------------------------------------------------------------- 
    PowerupResetCCxxxx();               	// Reset CCxxxx
    writeRFSettings();                   	// Write RF settings to config reg
    SPIWriteReg(CCxxx0_PATABLE , PA_VALE);//Write PATABLE,设置输出功率
    //--------------------------------------------------------------------------
   
    _EINT();                     					//使能全局中断
    while(1)
    {
        SPIStrobe(CCxxx0_SIDLE);  				//cc1101退出SWOR
          P4OUT &= ~BIT0;			//熄灯
     
      //  len =5; 			//设置要发射的数据长度
       // TxData(len);			//发射数据
          
          for(Temp = 0;Temp<0x1000;Temp++);	//延时
             TxData(6); 
               for(Temp = 0;Temp<0xFFFE;Temp++);	//延时
           for(Temp = 0;Temp<0x2FFE;Temp++);	//延时
          for(Temp = 0;Temp<0x1000;Temp++);	//延时
         for(Temp = 0;Temp<0x2FFE;Temp++);	//延时
          TxData(5);
     for(Temp = 0;Temp<0x1000;Temp++);//延时
     TxData(4);
     for(Temp = 0;Temp<0x1000;Temp++);	//延时
     TxData(3);
     for(Temp = 0;Temp<0x1000;Temp++);	//延时
     TxData(2);
     for(Temp=0;Temp<0x1000;Temp++);
     
      // for(Temp = 0;Temp<0xFFFE;Temp++);	//延时
      // for(Temp = 0;Temp<0xFFFE;Temp++);	//延时
       // for(Temp = 0;Temp<0xFFFE;Temp++);	//延时
      // for(Temp = 0;Temp<0xFFFE;Temp++);	//延时
         P4OUT |= BIT0;			//开灯
      
    }
}
//------------------------------------------------------------------------------
//#pragma vector=PORT1_VECTOR
//__interrupt void p1_ISR (void)
//{
  //  RxFlag = 0x11;
  //  P1IFG  = 0x00;
//}
//------------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -