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

📄 fa.c

📁 nrf905的发送与接收程序,相当精彩,要的可以下来看一看,请多指教,谢谢!!!
💻 C
字号:
#include<at892051.h>
#include <intrins.h>
#define uchar unsigned char 
#define uint  unsigned int

//没有Read RX_ADDRSS command的地址,怎么样来读取????
#define WC		0x00			// Write configuration register command
#define RC		0x10 			// Read  configuration register command**********//没有用过
#define WTP		0x20 			// Write TX Payload  command
#define RTP		0x21			// Read  TX Payload  command*********************//没有用过
#define WTA		0x22			// Write TX Address  command
#define RTA		0x23			// Read  TX Address  command*********************//没有用过
#define RRP		0x24			// Read  RX Payload  command
//#define stadby  0x11
/*******************************************************************************************/
typedef struct RFConfig
{
	uchar n;
	uchar buf[10];
}RFConfig;

code RFConfig RxTxConf =
{
	10,
	0x01,  
	0x0c,  //不重发,433.2MHz,6dBm,正常模式
	0x44,  //收发各4字节地址宽度
	0x20,
	0x20,  //收发有效数据宽度32位
	0xcc,
	0xcc,
	0xcc,
	0xcc,  //接收机地址 
	0x58   //16位CRC校验,允许校验,晶振16MHz,没有外部时钟
};

/*******************************************************************************************/
uchar data TxBuf[32]={0x70};
uchar data RxBuf[32];
/*******************************************************************************************/
uchar bdata DATA_BUF; 
sbit	flag	=DATA_BUF^7;
sbit	flag1	=DATA_BUF^0;
/*******************************************************************************************/
sbit	TX_EN=P1^7;
sbit	TRX_CE=P3^4;
sbit	PWR_UP=P1^2;
sbit	MISO=P1^3;
sbit	MOSI=P1^4;
sbit	SCK=P1^5;
sbit	CSN=P1^6;

sbit	AM=P3^2;
sbit	DR=P3^3;
sbit	CD=P3^5;


sbit  P37=P3^7; //数码管显示控制端
/*******************************************************************************************/
void Init(void);				// Initialize 
void Config905(void);			// Config nRF905 module
void SetTxMode(void);			// Set nRF905 in Tx mode
//void SetRxMode(void);			// Set nRF905 in Rx mode
void TxPacket(void);			// Send data by nRF905
//void RxPacket(void);			// Recive data by nRF905
void SpiWrite(uchar);			// Write data to nRF905
//uchar SpiRead(void);			// Read data to nRF905
void Delay(uchar n);			// Delay 100us

/*******************************************************************************************/
//function main();
/*******************************************************************************************/
void main(void)
{
	Init();
	Config905();				// Config nRF905 module
	while(1)
	{
		SetTxMode();				// Set Tx Mode
		TxPacket();					// Transmit Tx buffer data
		while(DR==0)
		{
			P37=0;
			Delay(100);
			Delay(100);
			P37=1;
		}
	}
}
/*******************************************************************************************/
//function InitIO();
/*******************************************************************************************/
void Init(void)
{
	CSN=1;						// Spi 	disable						
	SCK=0;						// Spi clock line init high
	DR=1;						// Init DR for input
	AM=1;						// Init AM for input
	PWR_UP=1;					// nRF905 power on
	TRX_CE=0;					// Set nRF905 in standby mode
	TX_EN=1;					// set radio in Tx mode	
}

/*******************************************************************************************/
//function Config905();
/*******************************************************************************************/
void Config905(void)
{
	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
}
/*******************************************************************************************/
//function Delay100us();Delay 100us
/*******************************************************************************************/
void Delay(uchar n)
{
	uint i;
	while(n--)
	for(i=0;i<80;i++);
}
/*******************************************************************************************/
//function SpiWrite();
/*******************************************************************************************/
void SpiWrite(uchar  byte)
{
	uchar i;
	DATA_BUF=byte;				// Put function's parameter into a bdata variable
	for (i=0;i<8;i++)			// Setup byte circulation bits
	{
		if (flag)				// Put DATA_BUF.7 on data line
			MOSI=1;
		else
			MOSI=0;
		SCK=1;					// Set clock line high
		DATA_BUF=DATA_BUF<<1;	// Shift DATA_BUF
		SCK=0;					// Set clock line low 
	}
}

/*******************************************************************************************/
//function TxPacket();
/*******************************************************************************************/
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(TxBuf[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(RxTxConf.buf[i+5]);
	}
	CSN=1;						// Spi disable
	TRX_CE=1;					// Set TRX_CE high,start Tx data transmission
	while(DR!=1);
	TRX_CE=0;					// Set TRX_CE low
}

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

/*******************************************************************************************/		 

⌨️ 快捷键说明

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