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

📄 905.h

📁 STC12LE5412RC单片机上通过nRF905芯片实现数据无线收发功能的源码。
💻 H
字号:

#include "reg52stc.h"
#include "spi.h"
#include "uart.h"
//*****************************************************//
//nRF905SPI接口指令宏定义
//*****************************************************//
#define WC    0x00        //写配置寄存器
#define RC    0x10		  //读配置寄存器
#define WTP   0x20		  //向TX-Payload寄存器写入发送有效数据
#define RTP   0x21		  //从TX-Payload寄存器读取发送有效数据
#define WTA   0x22		  //向TX-Address寄存器写入发送地址
#define RTA   0x23		  //从TX-Address寄存器读取发送地址
#define RRP   0x24		  //从RX-Payload寄存器读取接收到的有效数据
#define CC    0x80		  //快速设置配置寄存器中ch-no,hfreq-pll,pa-pwr

//#define RELOAD_COUNT 0xfd
#define num  4
sbit D2=P1^0;
sbit D1=P1^1;

//*****************************************************//
//nRF905相关设置信息的初始值
//*****************************************************//
typedef struct RFconfig{
  unsigned char n;
  unsigned char buf[10];
}RFconfig;

code RFconfig RxTxconfig = {
  10,
  0x01,     //need checked
  0x0c,     //output power is set to be +10dbm
  0x44,     //RX and TX address field width is set to be 4bytes
  0x20,     //RX payload is set to be 32bytes
  0x20,     //TX payload is set to be 32bytes
  0xcc,
  0xcc,
  0xcc,
  0xcc,     //RX address 
  0x58      //8bits CRC and enable,Fosc=16MHz,no external clock signal availiable,output clock frequency is 4MHz        
};


void Init905IO(void);				  //
void Config905(void);				  //
void Read_Config905(void);
void Tx_Package905(void);
int  Rx_Package905();
void SetTx905Mode(void);
void SetRx905Mode(void);
void SetStandby905Mode(void);
void Delayms(unsigned int);	
void MCU_led_Display(void);



//*****************************************************//
//函数名:
//输入参数:
//输出参数:
//功能描述:
//*****************************************************//
void Init905IO(void)
{
    CSN   = 1;
	DR    = 1;
	AM    = 1;
	PWR_UP= 1; //in standby mode for SPI programming
	TRX_CE= 0;
	TXEN  = 0;
}

//*****************************************************//
//函数名:
//输入参数:
//输出参数:
//功能描述:
//*****************************************************//
void Config905(void)
{
   unsigned char i;  
	CSN=1;
	CSN=0;
	SPIReadWrite(WC);
	for(i=0;i<RxTxconfig.n;i++)
	{
     SPIReadWrite(RxTxconfig.buf[i]);	 
    }
   CSN=1;
} 
//*****************************************************//
//函数名:
//输入参数:
//输出参数:
//功能描述:
//*****************************************************//
void Read_Config905(void)
{
  unsigned char i;
  unsigned char rx_config[10];
  CSN=1;
  CSN=0;
  SPIReadWrite(RC);
  for(i=0;i<10;i++)
  {
    rx_config[i]=SPIReadWrite(0x00);
  }	
  CSN=1;
  for(i=0;i<10;i++)
  {
    UART_Send(rx_config[i]);
	Delayms(10);
  }
}
//*****************************************************//
//函数名:
//输入参数:
//输出参数:
//功能描述:
//*****************************************************//
void Tx_Package905()
{
  unsigned char i;
  SetStandby905Mode();
  Delayms(1);
  CSN=1;
  CSN=0;
  SPIReadWrite(WTA);
  for(i=0;i<4;i++)
  {
    SPIReadWrite(RxTxconfig.buf[i+5]); 
  }
  CSN=1;
  Delayms(1);
  CSN=0;
  SPIReadWrite(WTP);
  for(i=0;i<Tnum;i++)
  {
  	SPIReadWrite(tBuf[i]);	 //发送出长度为RxTxconfig.buf[5]字节的数据
	UART_Send(tBuf[i]); 
  }	  
  CSN=1;
  SetTx905Mode();
  Delayms(1);     //do not need   
  while(DR!=1);
  SetStandby905Mode();
  MCU_led_Display();
} 


//*****************************************************//
//函数名:
//输入参数:
//输出参数:
//功能描述:
//*****************************************************//
int  Rx_Package905() 
{
  unsigned char i;
  SetRx905Mode();
  for(i=0;i<100;i++);
  if(AM==1)
  {
     if(DR==1)
	 {
	   TRX_CE=0;
       CSN=1;
	   CSN=0;
       SPIReadWrite(RRP);
	   for(i=0;i<10;i++);

       for(i=0;i<Tnum;i++)
       {
  	      rBuf[i]=SPIReadWrite(0);
		  UART_Send(rBuf[i]);
       }
	   	 	   
	   CSN=1;
	   while(AM||DR);
	   Delayms(1);
	   MCU_led_Display();
	   
	 }
	return 1;
  }
 return 0;
}


//*****************************************************//
//函数名:
//输入参数:
//输出参数:
//功能描述:
//*****************************************************//
/*void Read_Tx905()
{

}*/

//*****************************************************//
//函数名:
//输入参数:
//输出参数:
//功能描述:
//*****************************************************//
void SetTx905Mode(void)
{
  TRX_CE=1;
  TXEN  =1;
  Delayms(1);
}

//*****************************************************//
//函数名:
//输入参数:
//输出参数:
//功能描述:
//*****************************************************//
void SetRx905Mode(void)
{
  TRX_CE=1;
  TXEN  =0;
  Delayms(1);
}

//*****************************************************//
//函数名:
//输入参数:
//输出参数:
//功能描述:
//*****************************************************//
void SetStandby905Mode(void)
{
  TRX_CE=0;
}

//*****************************************************//
//函数名:
//输入参数:
//输出参数:
//功能描述:
//*****************************************************//
void Delayms(unsigned int n)
{
   unsigned int j;
   while(n>0)
   {
      for(j=0;j<=699;j++);
	  n--;
   }
}

//*****************************************************//
//函数名:
//输入参数:
//输出参数:
//功能描述:
//*****************************************************//
void MCU_led_Display(void)
{
   unsigned char i=0;
   for(i=0;i<2;i++)
   {
     D2=~D2;
	 Delayms(25);
     D2=~D2;
	 Delayms(25);
   }
}

⌨️ 快捷键说明

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