📄 rf2401.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 + -