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

📄 +̤

📁 使用CC1101无线模块进行多机通信
💻
📖 第 1 页 / 共 2 页
字号:

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  
                                       //可变长度
                              
0x01,   //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)

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

unsigned int temp;
unsigned char led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管显示值

//-----------------------------------------------------------------------------
//主函数

void main (void)
{
  
    WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
    P2SEL = 0X00;
    P2DIR |= SPI_SIMO + SPI_CLK + CSn_PIN  ;  //为输出
    P2DIR &= ~( SPI_SOMI +GDO0_PIN );         //为输入   
    P2OUT &= ~(SPI_SIMO  + SPI_CLK );
    P2OUT |= CSn_PIN;
    P4DIR |= BIT1;
    
    //****************************************************************************** 
    PowerupResetCCxxxx();                   // Reset CCxxxx
    writeRFSettings();                      // Write RF settings to config reg
    SPIWriteReg(CCxxx0_PATABLE , PA_VALE);  //Write PATABLE,设置输出功率
    //******************************************************************************
    P2IES |= GDO0_PIN;      		//使能GDO0中断发生在下降沿
    P2IFG = 0x00;			//中断寄存器清零
    P2IE |= GDO0_PIN;		        //中断使能
    _EINT();                     	//使能全局中断
    SPIStrobe(CCxxx0_SIDLE);     	//cc1101退出SWOR
    SPIStrobe(CCxxx0_SFRX);	        //清CCxxx0_RXFIFO
    SPIStrobe(CCxxx0_SRX);      	//进入接收
   
    while(1)
    {
      /*  if(RxFlag == 99)
        {//表示收到数据,数据在rxBuffer,发送方地址在rxAddr中 
            RxFlag = 0;       							
            //for(temp=0; temp<0xffe; temp++);	//延时
            for(temp=0; temp<0x3c; temp++)		//清rxBuffer
            {
                rxBuffer[temp] = 0;
            }
            P4OUT |= BIT0;	//熄灯
            SPIStrobe(CCxxx0_SIDLE);		//cc1101退出SWOR
            SPIStrobe(CCxxx0_SFRX);			//清CCxxx0_RXFIFO
            SPIStrobe(CCxxx0_SRX);     	//进入接收
        }*/
    }
}

//------------------------------------------------------------------------------
#pragma vector=PORT2_VECTOR
__interrupt void p2_ISR (void)
{
    unsigned int length;
    unsigned char *status;
    
    if(P2IFG & GDO0_PIN)//有数据输入。。
    {
	     // RxFlag = 11;  
	      while( SPIRead(CCxxx0_RXBYTES, READ_STATUS) & CCxxx0_NUM_RXBYTES)// 判断CCxxx0_RXBYTES 是否为空
	      {
	          length = SPIRead(CCxxx0_RXFIFO ,CCxxx0_READ_SINGLE);//长度=地址(1)+数据(20) 
	          _NOP();   
	          if(length < LENGTH)                                
	          {
	              SPIReadBurstReg(CCxxx0_RXFIFO, rxAddr, 2);//接收 发送方的地址
	              if(rxAddr[1]==ADDR_VAL1 && ADDR_VAL0==0)//发送方在本簇,且当前节点(接收方)是簇头
	              {
	              	SPIReadBurstReg(CCxxx0_RXFIFO, rxBuffer, length-2);   // Pull data(数据-地址)
	                SPIReadBurstReg(CCxxx0_PKTSTATUS,status,1);//读取CRC状态
	                if(*status & CCxxx0_CRC_OK )
		              {
		                //RxFlag = 99; //收到crc效验正确的数据
		                rxLength = length-2;//保存收到数据包的长度(数据)
		                P4OUT &= ~BIT1;//开灯
                                    P5DIR|=BIT0+BIT1+BIT2+BIT3;//p2.0/1/2是数码管选择信号,p2.3是使能信号。
                                    P3DIR=0XFF;//
                                    P3OUT=led[rxBuffer[0]];
                                    P5OUT=0X0A;//
                                   // if(RxFlag == 99)
       // {//表示收到数据,数据在rxBuffer,发送方地址在rxAddr中 
            //RxFlag = 0;       							
            //for(temp=0; temp<0xffe; temp++);	//延时
                               //for(temp=0; temp<0x06; temp++)		//清rxBuffer
                                // {
                                 //   rxBuffer[temp] = 0;
                                 //}
                                  P4OUT |= BIT1;	//熄灯
                                  SPIStrobe(CCxxx0_SIDLE);		//cc1101退出SWOR
                                  SPIStrobe(CCxxx0_SFRX);			//清CCxxx0_RXFIFO
                                  SPIStrobe(CCxxx0_SRX);     	//进入接收
		                break;
		              }
		       }
	          }
	      }
          
    }
    _NOP();
    P2IFG  = 0X00;//清中断寄存器,
}

⌨️ 快捷键说明

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