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

📄 rf2401.c

📁 NRF2401代码参考 。
💻 C
字号:
#include <ZJH.h>
void Delay100(void);
unsigned char TxAddress[]  ={0xcc,0xcc,0xcc,0xcc,0xcc};


bdata uchar DATA_BUF;
extern void Delay100(void);
void Delay100(void)
{
	unsigned int i;
	for(i=0;i<100;i++);
}



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

void Clear_One(uchar IDATA )
     {
        IDATA=LOW;
     }
void Clear(uchar *IDATA, uchar length )
     {      uint i;
        for( i=0;i<length;i++)
            {
               IDATA[i]=LOW;
            }
     }  


void SetTxMode(void)

{
	PWR_UP=1;          //设置为配置模式
	CE=0;
	CS=1;
	Delay100();
	DATA=0;
	CLK1=1;                 //关闭配置表
	CLK1=0;

	//设置为Activemodes(Tx)
	CS=0;
	CE=1;
	Delay100();
}




void SetRxMode(void)
{
	Delay100();	//设置为配置模式
	PWR_UP=1;
       //Delay100();
        CE=0;
        CS=1;
	Delay100(); /////----
	//配置寄存器0字节RXEN 设置为1:接收模式
	DATA=1;
	CLK1=1;
	CLK1=0;

	//设置为Activemodes(Rx)
	CS=0;
	CE=1;
	Delay100();
}



/*unsigned char RF2401_RxPacket(unsigned char *RxBuf)
{
	unsigned int i;

	DR1=1;                                       //配置单片机锁存器

	if(DR1)
	{
		for (i=0; i<DATA1_W/8; i++)
		{
			*RxBuf	= Spi_ByteRead();
			RxBuf++;
		}
		return 1;
	}
	return 0;
} */


void RF2401_TxPacket(uchar TxBuf[])
{
	int i;
	uchar variable2;


	CE=1;
	Delay100();
	for(i=0;i< (ADDR_W/8);i++)	//写入接收地址(按字节对齐)
	{
		variable2=TxAddress[i];
		Spi_ByteWrite(variable2);
	}

	for(i=0;i<(DATA1_W/8);i++)	//写入需要发送的数据(按字节对齐)
	{
		variable2=TxBuf[i];
		Spi_ByteWrite(variable2);
	}

	CE=0; //CE置低使发送有效

	Delay100(); //时钟信号高电平保持
	Delay100(); //时钟信号高电平保持
	Delay100(); //时钟信号高电平保持
	Delay100(); //时钟信号高电平保持

}

void RF2401TxPacket(uchar TxBuf[],uchar *AddrArray)
{
	int i;
	uchar variable2;


	CE=1;
	Delay100();
	for(i=0;i<2;i++)	         //写入接收地址(按字节对齐)
	{
		variable2=AddrArray[i];
		Spi_ByteWrite(variable2);
	}

	for(i=0;i<(DATA1_W/8);i++)	//写入需要发送的数据(按字节对齐)
	{
		variable2=TxBuf[i];
		Spi_ByteWrite(variable2);
	}

	CE=0; //CE置低使发送有效

	Delay100(); //时钟信号高电平保持
	Delay100(); //时钟信号高电平保持
	Delay100(); //时钟信号高电平保持
	Delay100(); //时钟信号高电平保持

}




void Spi_ByteWrite(unsigned char send)
{
	unsigned char i;

	DATA_BUF = send;

	CLK1 = 0;

	for (i=0; i<8; i++)
	{

		if (DATA7)	//总是发送最高位
		{
			DATA = 1;
		}
		else
		{
			DATA = 0;
		}
		CLK1 = 1;                              //最小保持500ns
		DATA_BUF = DATA_BUF << 1;
		CLK1 = 0;
	}
}


uchar Spi_ByteRead(void)
{
	unsigned char i = 0;
	for (i=0; i<8; i++)
	{
		DATA_BUF = DATA_BUF << 1;
		CLK1 = 1;
		DATA = 1;	//设置为输入状态
		if (DATA)	//读取最高位,保存至最末尾,通过左移位完成整个字节
		{
			DATA_BUF |= BYTE_BIT0;
		}
		else
		{
			DATA_BUF &= ~BYTE_BIT0;
		}
		CLK1 = 0;
	 }

	 return DATA_BUF;
}

⌨️ 快捷键说明

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