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

📄 shou.c

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

#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,  //不重发,433MHz,6dBm,正常模式
	0x44,  //收发各4字节地址宽度
	0x20,
	0x20,  //收发有效数据宽度32位
	0xcc,
	0xcc,
	0xcc,
	0xcc,  //接收机地址 
	0x58   //16位CRC校验,允许校验,晶振16MHz,没有外部时钟
};

/*******************************************************************************************/
uchar data TxBuf[32];
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);
void Inituart(void);			// initialize 232 uart
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)
	{
		SetRxMode();				// Set nRF905 in Rx mode
		while(DR==0) ;

			RxPacket();
	
			P37=0;
			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=0;					// set radio in Rx 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 SpiRead();
/*******************************************************************************************/
uchar SpiRead(void)
{
	uchar i;
	for (i=0;i<8;i++)			// Setup byte circulation bits
	{
		DATA_BUF=DATA_BUF<<1;	// Right shift DATA_BUF
		SCK=1;					// Set clock line high
		if (MISO)
			flag1=1;			// Read data
		else
			flag1=0;


		SCK=0;					// Set clock line low
	}
	return DATA_BUF;			// Return function parameter
}
/*******************************************************************************************/
//function RxPacket();
/*******************************************************************************************/
void RxPacket(void)
{
	uchar i;
	TRX_CE=0;					// Set nRF905 in standby mode
	CSN=0;						// Spi enable for write a spi command
	SpiWrite(RRP);				// Read payload command	
	for (i=0;i<32;i++)
	{
		RxBuf[i]=SpiRead();		// Read data and save to buffer
	}
	CSN=1;						// Disable spi

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

⌨️ 快捷键说明

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