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

📄 +̤

📁 使用CC1101无线模块进行多机通信
💻
📖 第 1 页 / 共 2 页
字号:
/*--------------------------------------------------------------------
名称:无线模块接收程序
功能:
描述:
日期:
--------------------------------------------------------------------*/


#include  <msp430x14x.h>
#include <stdlib.h>
#include "CC1101_h.h"



#define CSn_PIN     BIT5//P1.5cs使能信号,在地址和数据转换期间,CSn脚(芯片选择,低电平有效)
//必须保持低电平,如果过程中变成高,则取消转换。
#define GDO0_PIN    BIT4//P1.4
#define SPI_SOMI    BIT3//P1.2(和GDO1为同一个脚)//接收数据引脚
#define SPI_CLK     BIT2//P1.1 时钟引脚,发送数据下降沿,接收数据上升沿。
#define SPI_SIMO    BIT1//P1.0发送数据引脚

//unsigned char txBuffer[LENGTH_ID];  
unsigned char rxBuffer[LENGTH+1];//数据长度最大值,收到的数据存放在rxBuffer当中。
//unsigned char RxFlag;//
unsigned char rxAddr[2];//发送方的地址存放在rxAddrz当中。
unsigned int rxLength;//
//-----------------------------------------------------------------------------
//输出数据,发送数据并接收状态信息,返回值为状态信息。
//-----------------------------------------------------------------------------
unsigned char SPI_bitbang_out(unsigned char value)//位响应
{
     unsigned char i;
     unsigned char rTemp;//接收状态信息数据
     
     for(i = 0; i < 8; i++)
     {  
         P2OUT &=~SPI_CLK;                    //CLK=0 Set clock low 
         if(value & 0x80)
           P2OUT |=  SPI_SIMO;  // SIMO=1 Set SIMO high...
         else 
           P2OUT &= ~SPI_SIMO;             // SIMO=0 Set SIMO low...
         
         value = value << 1;       
         P2OUT |= SPI_CLK;                    //CLK=1 Set clock high
         
         rTemp <<= 1;
         if(P2IN & SPI_SOMI)//通过SO接收,芯片状态。    
           rTemp |= 0x01; //最低位置1
         else
           rTemp &= 0xfe; //最低位置0
     }
     
     P2OUT &=~SPI_CLK;                        //CLK=0 Set clock low 
     
    return(rTemp);
}

//------------------------------------------------------------------------------------
// Input eight-bit value using selected bit-bang pins
//接收数据。
//------------------------------------------------------------------------------------
unsigned char SPI_bitbang_in(void)
{ 
     unsigned char i;
     unsigned char rTemp;
     
     for(i = 8; i > 0; i--)
     {   
         P2OUT |= SPI_CLK;                    //CLK=1 Set clock high
         rTemp <<= 1;
         
         if(P2IN & SPI_SOMI)
           rTemp |= 0x01;
         else
           rTemp &= 0xfe;
         
         P2OUT &=~SPI_CLK;                    //CLK=0 Set clock low    
     }
     return(rTemp);
}

//--------------------------------------------------------------------------------
//spi写寄存器
//--------------------------------------------------------------------------------
void SPIWriteReg(unsigned char addr, unsigned char value)
{
    P2OUT &=~CSn_PIN;                         //CS=0 CS enable开启cs使能
    while (P2IN & SPI_SOMI);                  
    //当CSn变低,在开始转换头字节之前,
    //MCU必须等待,指导SO脚变低,这表明电压调制器已经稳定,晶体正在运作中, 除非芯片引脚,
    //处在sleep或者XOFF状态,SO脚在CSn变低之后总会立即变低。
    // Wait for CCxxxx ready
    SPI_bitbang_out(addr);                    // Send address发送地址
    SPI_bitbang_out(value);                   // Send data发送数据
    P2OUT |= CSn_PIN;                         //CS=1 CS disable
}
//-----------------------------------------------------------------------------------
//spi写burst寄存器
//----------------------------------------------------------------------------------
void SPIWriteBurstReg(unsigned char addr, unsigned char *buffer, unsigned char count)
{
     unsigned char i;
     P2OUT &=~CSn_PIN;                        //CS=0 CS enable//开启cs使能
     while (P2IN & SPI_SOMI);                 // Wait for CCxxxx ready 
     SPI_bitbang_out(addr | CCxxx0_WRITE_BURST);   // Send address//发送地址
     for (i = 0; i < count; i++)
     {
         SPI_bitbang_out(buffer[i]);          // Send data//发送数据
     }
     P2OUT |= CSn_PIN;                        //CS=1 CS disable
}

//---------------------------------------------------------------------------------
//spi读状态
//---------------------------------------------------------------------------------
unsigned char SPIRead(unsigned char addr, unsigned char falg_read)
{
      unsigned char rTemp;
      P2OUT &=~CSn_PIN;                       //CS=0 CS enable开启cs使能
      while (P2IN & SPI_SOMI);                // Wait for CCxxxx ready
      SPI_bitbang_out(addr | falg_read);      // Send address//发送地址
      rTemp = SPI_bitbang_in();               // Read data//读数据
      P2OUT |= CSn_PIN;                       //CS=1 CS disable
      return ( rTemp );
}
//--------------------------------------------------------------------------------
//spi读burst寄存器
//--------------------------------------------------------------------------------
void SPIReadBurstReg(unsigned char addr, unsigned char *buffer, unsigned char count)
{
    unsigned char i;
     P2OUT &=~CSn_PIN;                        //CS=0 CS enable
     while (P2IN & SPI_SOMI);                 // Wait for CCxxxx ready
     SPI_bitbang_out(addr | CCxxx0_READ_BURST);    // Send address
     for (i = 0; i < count; i++)
     {
         buffer[i] = SPI_bitbang_in();        // Read data
     }
     P2OUT |= CSn_PIN;                        //CS=1 CS disable
}

//------------------------------------------------------------------------------
//spistrobe
//------------------------------------------------------------------------------
unsigned char SPIStrobe(unsigned char strobe)
{
     unsigned char RxTxstatus;
     P2OUT &=~CSn_PIN;                        //CS=0 CS enable
     while (P2IN & SPI_SOMI);                 // Wait for CCxxxx ready
     RxTxstatus = SPI_bitbang_out(strobe);    // Send strobe//发送strobe
     P2OUT |= CSn_PIN;                        //CS=1 CS disable
     return(RxTxstatus);
}

//-----------------------------------------------------------------------------
//复位
//-----------------------------------------------------------------------------
void PowerupResetCCxxxx(void)
{
    P2OUT &=~SPI_CLK;                         //CLK=0 Set clock low 
    P2OUT &= ~SPI_SIMO;                       // SIMO=0 Set SIMO low...
    P2OUT |= CSn_PIN;                         //CS=1 CS disable
    _NOP();_NOP();_NOP();_NOP();_NOP();
     P2OUT &=~CSn_PIN;                        //CS=0 CS enable       
    _NOP();_NOP();_NOP();_NOP();_NOP();
    P2OUT |= CSn_PIN;                         //CS=1 CS disable
    _NOP();_NOP();_NOP();_NOP();_NOP();
    P2OUT &=~CSn_PIN;                         //CS=0 CS enable
    while (P2IN & SPI_SOMI);                  // Wait for CCxxxx ready
    SPI_bitbang_out(CCxxx0_SRES);
    while (P2IN & SPI_SOMI);                  // Wait for CCxxxx ready
    P2OUT |= CSn_PIN;                         //CS=1 CS disable
}
/*
void TxData(void)   //先采用查询发送
{
       P1IE &= ~GDO0_PIN;   //关闭GDO0中断      
       txBuffer[0] = 0;
       txBuffer[1] = 0x22;
       txBuffer[2] = 0x77;
       txBuffer[3] = 0xdd;
       SPIStrobe(CCxxx0_SFTX);                //刷新TX_FIFO
       SPIWriteBurstReg(CCxxx0_TXFIFO, txBuffer, LENGTH_ID ); // Write TX data;    LENGTH_ID == 4
       SPIStrobe(CCxxx0_STX);      // Change state to TX, initiatingdata transfer
       while (!( P1IN& GDO0_PIN));    // Wait GDO0 to go hi -> sync TX'ed                                   
       while ( P1IN& GDO0_PIN);       // Wait GDO0 to clear -> end of pkt
       P1IFG &= ~GDO0_PIN;                  // After pkt TX, this flag is set, Clear it.
       P1IE |= GDO0_PIN;   //开GDO0中断            
}*/

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

⌨️ 快捷键说明

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