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

📄 nrf905.c

📁 905无线芯片的使用有不够详细出,尽情指点,本人不胜感激
💻 C
字号:
#include "NRF905.h"
#include "type.h"
//extern MSCOMM COMM;
extern RFCONFG RFConfg;
//extern uchar CON_4300_10[10];
/*******************************************************************************
* 名  称:
* 说  明:
* 功  能:
* 调  用:
* 输  入:
* 返回值:
*******************************************************************************/
void SPI_ByteWrite(uchar Data)
{
	uchar i;
	for(i=0;i<8;i++)
	{
		 ClrRF_SCK();
		 if(( Data & 0x80 ) == 0x80)
		 	 SetRF_SI();
		 else
		 	 ClrRF_SI();
		 _NOP();
		 Data<<=1;
		 SetRF_SCK();
		 _NOP();
	}
	ClrRF_SCK();
}
/*******************************************************************************
* 名  称:
* 说  明:
* 功  能:
* 调  用:
* 输  入:
* 返回值:
*******************************************************************************/
uchar SPI_ByteRead(void)
{
	 uchar i;
	 uchar temp = 0;
	 ClrRF_SCK();
	 _NOP();
	 _NOP();
	 for(i=0;i<8;i++)
	 {
	 	 SetRF_SCK();
	 	 temp<<=1;
	 	 _NOP();
	 	 _NOP();
	 	 if((RFIN&RF_SO)==RF_SO)  //获得端口状态
	 	    temp |= 0x01;
	 	 _NOP();
	 	 ClrRF_SCK();
	 	 _NOP();
	 	 _NOP();
	 }
	 return temp;
}
/*******************************************************************************
* 名  称:
* 说  明:
* 功  能:
* 调  用:
* 输  入:
* 返回值:
*******************************************************************************/
void RF_Delay(uint temp)
{
	 uchar i;
	 for(i=temp;i>0;i--)
	 {
	   _NOP();
	 }
}
/*******************************************************************************
* 名  称:
* 说  明:
* 功  能:
* 调  用:
* 输  入:
* 返回值:
*******************************************************************************/
void RFStandby(void)
{
	 SetRF_PWR();
	 ClrRFTX_CE();
	 ClrRFTX_EN();
}
/*******************************************************************************
* 名  称:
* 说  明:
* 功  能:
* 调  用:
* 输  入:
* 返回值:
*******************************************************************************/
void RFRXModel(void)
{
	 SetRF_PWR();
	 SetRFTX_CE();
	 ClrRFTX_EN();
}
/*******************************************************************************
* 名  称:
* 说  明:
* 功  能:
* 调  用:
* 输  入:
* 返回值:
*******************************************************************************/
void RFTXModel(void)
{
	 SetRF_PWR();
	 SetRFTX_CE();
	 SetRFTX_EN();
}
/*******************************************************************************
* 名  称:
* 说  明:
* 功  能:
* 调  用:
* 输  入:
* 返回值:
*******************************************************************************/
void RFPortInit(void)
{
	 RFDIR |= (RFTX_EN + RFTX_CE + RF_PWR + RF_SI + RF_SCK + RF_CSN);
	 RFDIR &=~RF_SO;
	 DRIES &=~RF_DR;
	 DRIE   = 0;
	 DRIE  |= RF_DR;
}
/*******************************************************************************
* 名  称:
* 说  明:
* 功  能:
* 调  用:
* 输  入:  输入p指向本身器件接收地址 本应用中为表号数据
* 返回值:
*******************************************************************************/
void RFConfig(RFCONFG *p)
{
	uchar i;
	//uchar *ptr1;
	uchar CON_RF[10] = {0x6B,0x0C,0x44,0x20,0x20,0x00,0x00,0x00,0x03,0xdb};
	CON_RF[5]        = *(uchar *)(p->ReceAdd)++;
	CON_RF[6]        = *(uchar *)(p->ReceAdd)++;
	CON_RF[7]        = *(uchar *)(p->ReceAdd)++;
	CON_RF[8]        = *(uchar *)(p->ReceAdd)++;
	CON_RF[3]        = p->ReceNum;
	CON_RF[4]        = p->SendNum;

	RFStandby();
	ClrRF_CSN();
	SPI_ByteWrite(0x00);
	for(i=0;i<10;i++)
	{
		 SPI_ByteWrite(CON_RF[i]);
	}
	SetRF_CSN();
  RF_Delay(250);
}

void RFReadConfig(uchar *p)
{
	uchar i;
	RFStandby();
	ClrRF_CSN();
	SPI_ByteWrite(0x10);
	for(i=0;i<10;i++)
	{
		 *p = SPI_ByteRead();
		 p++;
	}
	SetRF_CSN();
  RF_Delay(200);
}
/*******************************************************************************
* 名  称:
* 说  明:
* 功  能:
* 调  用:
* 输  入:
* 返回值:
*******************************************************************************/
void RF_SendBytes(uchar *Add,uchar *p,uchar Len)
{
	uchar i;
	RFStandby();
	ClrRF_CSN();
	SPI_ByteWrite(WTA);	      //Write TX-Address
	for(i=0;i<4;i++)
	{
		SPI_ByteWrite(*Add);
		Add++;
	}
	SetRF_CSN();
	_NOP();
	_NOP();
  ClrRF_CSN();
  SPI_ByteWrite(WTP);
  for(i=0;i<Len;i++)
  {
  	SPI_ByteWrite(*p);
  	p++;
  }
  SetRF_CSN();
  RF_Delay(300);
  RFTXModel();
}
/*******************************************************************************
* 名  称:
* 说  明:
* 功  能:
* 调  用:
* 输  入:
* 返回值:
*******************************************************************************/
void RF_RecBytes(uchar *p,uchar Len)
{
	uchar i;
	RFStandby();
	//RF_Delay(200);
	ClrRF_CSN();
	SPI_ByteWrite(RRP);      //Read  RX-payload
	for(i=0;i<Len;i++)
	{
		 *p = SPI_ByteRead();
		 p++;
	}
  SetRF_CSN();
}
/*******************************************************************************
**
**                                  文件结束
**
*******************************************************************************/

⌨️ 快捷键说明

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