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

📄 nrf905.c

📁 nrf905开发板:AT89S52单片机与NRF905实现无线通信
💻 C
字号:
#include "nRF905.h"


#define uchar unsigned char 
#define uint  unsigned int

code TxAddress[4]={0xcc,0xcc,0xcc,0xcc};

#define TxRxBuf_Len 32

unsigned char TxRxBuf[TxRxBuf_Len];

static void Delay(uchar n)
{
	uint i;
	while(n--)
	for(i=0;i<80;i++);	
}


#ifdef TX_ENABLE
/*******************************************************************************************/
//					TX_ENABLE	TX_ENABLE	TX_ENABLE
/*******************************************************************************************/


code RFConfig RxTxConf =
{
	10,
	RFConfig_Bit0, 	RFConfig_Bit1, 	RFConfig_Bit2, 	RFConfig_Bit3, 	RFConfig_Bit4,
	RFConfig_Bit5, 	RFConfig_Bit6, 	RFConfig_Bit7, 	RFConfig_Bit8, 	RFConfig_Bit9	
};




/*******************************************************************************************/
//function SetTxMode();
/*******************************************************************************************/
void SetTxMode(void)				
{	
	TRX_CE=0;
	TX_EN=1;
	Delay(1); 					// delay for mode change(>=650us)
}				
/*******************************************************************************************/
unsigned char CheckCD(void)		//Pin->检查是否已存在 同频率载波
{
	if (CD==1)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
/*******************************************************************************************/
void TxPacket(void)
{
	uchar i;
	//Config905();				
	CSN=0;						// Spi enable for write a spi command	
	SpiWrite(WTP);				// Write payload command
	for (i=0;i<32;i++)
	{
		SpiWrite(TxRxBuf[i]);		// Write 32 bytes Tx data
	}
	CSN=1;						// Spi disable						
	Delay(1);
	CSN=0;						// Spi enable for write a spi command	
	SpiWrite(WTA);				// Write address command
	for (i=0;i<4;i++)			// Write 4 bytes address
	{
		SpiWrite(TxAddress[i]);
	}	
	CSN=1;						// Spi disable
	TRX_CE=1;					// Set TRX_CE high,start Tx data transmission
	Delay(1);					// while (DR!=1);
	TRX_CE=0;					// Set TRX_CE low
}
/*******************************************************************************************/
//
/*RF-Configure-Register byte:1*/
code unsigned char RF_byte1[4]={0x00,0x04,0x08,0x0c};
//不同的发射功率

void SetRF_PA_PWR(unsigned char i)	//SPI->设置发射功率
{
	CSN=0;						// Spi enable for write a spi command
	SpiWrite(0x01);				// Write config command写放配置命令 从1号字节开始写
	SpiWrite(RF_byte1[i]);
	CSN=1;						// Disable Spi
}

#endif



#ifdef RX_ENABLE
/*******************************************************************************************/
//						RX_ENABLE	RX_ENABLE	RX_ENABLE
/*******************************************************************************************/

//unsigned char TxRxBuf_head=0;
//unsigned char TxRxBuf_tail=0;
//与TxRxBuf共同构成一个循环队列
#ifndef TX_ENABLE
code RFConfig RxTxConf =
{
	10,
	RFConfig_Bit0, RFConfig_Bit1, RFConfig_Bit2, RFConfig_Bit3, RFConfig_Bit4,
	RFConfig_Bit5, RFConfig_Bit6, RFConfig_Bit7, RFConfig_Bit8, RFConfig_Bit9	
};
#endif



/*******************************************************************************************/
//function SetRxMode();
/*******************************************************************************************/
void SetRxMode(void)
{
	TX_EN=0;
	TRX_CE=1;
	Delay(1); 					// delay for mode change(>=650us)				
}
/*******************************************************************************************/
unsigned char CheckDR(void)		//检查是否有新数据传入 Data Ready
{
	if (DR==1 && TRX_CE==1 && TX_EN==0)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
/*******************************************************************************************/
void RxPacket(void)
{
	uchar i;
	TRX_CE=0;					// Set nRF905 in standby mode	

/*	SpiCmdRead(RRP,TxRxBuf,32);*/
	CSN=0;						// Spi enable for write a spi command

	SpiWrite(RRP);				// Read payload command	
	for (i = 0 ;i < 32 ;i++)
	{
		TxRxBuf[i]=SpiRead();		// Read data and save to buffer		
	}
//	TxRxBuf_tail = i>=TxRxBuf_Len? 0:i;					//数据接收完毕,修改TxRxBuf
	CSN=1;						// Disable spi
	while(DR||AM);	

	TRX_CE=1;
}
/*******************************************************************************************/

#endif


/*******************************************************************************************/
//function InitIO();
/*******************************************************************************************/
void nRF905Init(void)
{
	/*SPI init*/
	CSN=1;						// Spi 	disable						
	SCK=0;						// Spi clock line init low
	/*ICO*/
	DR=1;						// Init DR for input
	AM=1;						// Init AM for input
	CD=1;						// Init CD for input
	/*模式设置*/
	PWR_UP=1;					// nRF905 power on
	TRX_CE=0;					// Set nRF905 in standby mode
	TX_EN=0;					// set radio in Rx mode	
}

/*******************************************************************************************/
//function Config905();
/*******************************************************************************************/
void Config905(void)
{
	SpiCmdWrite(WC ,RxTxConf.buf ,RxTxConf.n);
/*	uchar i;					
	CSN=0;						// Spi enable for write a spi command
	SpiWrite(WC);				// Write config command写放配置命令
	for (i=0;i<RxTxConf.n;i++)	// Write configration words  写放配置字
	{
		SpiWrite(RxTxConf.buf[i]);
	}
	CSN=1;						// Disable Spi
	*/
}




/*******************************************************************************************/
void SetST_BYmode(void)
{
	TX_EN=0;
	TRX_CE=0;
	Delay(1); 					// delay for mode change(>=650us)				
}

⌨️ 快捷键说明

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