📄 905收.h
字号:
/***********************************************************************************
***********************************************************************************
*********************************
无线收发模块RF905操作与控制程序
*********************************
文件名称:RF905.h
功 能:完成无线收发模块RF905工作方式的设定。控制数据的接收与发送
设 计 者:黄开坤
**********************************************************************************/
#ifndef RF905
#define WC 0x00 // 写配置寄存器
#define RC 0x10 // 读配置寄存器
#define WTP 0x20 // 向TX-Payload 寄存器写入发送有效
#define RTP 0x21 // 从TX-Payload 寄存器读取发送有效
#define WTA 0x22 // 向TX-Address 寄存器写入发送地址
#define RTA 0x23 // 从TX-Address 寄存器读取发送地址
#define RRP 0x24 // 从RX-Payload 寄存器读取接收到的数据
/***微秒级延时程序*****************************************************************/
void Delay1u(uchar x) //延时时间=机周*2*X+2;X=0至255
{
while(--x);
}
/***端口定义及变量声明*************************************************************/
uchar TxBuf[32] ;//发送缓冲区
uchar RxBuf[32] ;//接收缓冲区
sbit SCK =P2^2 ;//SIP时钟
sbit MISO =P2^3 ;//SIP输出
sbit TRX_CE =P2^6 ;//使能RF905发送与接收
sbit CSN =P2^1 ;//SIP使能
sbit MOSI =P2^4 ;//SIP输入
sbit DR =P2^5 ;//接收或发送数据完成
sbit TX_EN =P2^7 ;//RF905发送与接收选择
/***nRF905 寄存器配置参数**********************************************************/
typedef struct RFConfig
{ uchar n ;
uchar buf[10] ;
}RFConfig ;
code RFConfig RxTxConf =
{
10,
0x4c, 0x0c, 0x44, 0x20, 0x20, 0xcc, 0xcc, 0xcc,0xcc, 0x58
};
/***SIP写字节操作******************************************************************/
void Spi_Write(uchar data)
{
uchar i ;
for (i=0;i<8;i++) //逐位发写数据,高位在前,低位在后
{
if (byte&0x80)
MOSI=1 ;
else
MOSI=0 ;
SCK=1 ;//启动写数据
data=data<<1 ;//数据左移,准备发送下一个数数据
SCK=0 ;//
}
}
/***ISP读字节操作******************************************************************/
uchar Spi_Read(void)
{
uchar i ;
uchar DATA=0 ;//暂存读取的数据
for (i=0;i<8;i++) //逐位读取数据,高位在前,低位在后
{
DATA=DATA<<1 ;//
SCK=1 ;//
if (MISO)
DATA=DATA&0x01 ;//
else
flag1=0 ;
SCK=0 ;
}
return DATA_BUF ;//DATA_BUF 为接收到的完整数据
}
/***初始化RF905********************************************************************/
void RF905_Initial(void)
{
uchar i;
CSN=0 ;//CSN片选信号,SPI 使能
SpiWrite(WC) ;//写配置寄存器令
for (i=0;i<RxTxConf.n;i++) //放配置字
{
SpiWrite(RxTxConf.buf[i]); //RxTxConf 保存预先设置好
的配置信息
}
CSN=1 ;// 结束SPI 数据传输
}
/***设置RF905为发送模式************************************************************/
void SetTxMode(void)
{
TX_EN=1;
TRX_CE=0;
Delay1u(250); // delay for mode change(>=650us)
Delay1u(250);
Delay1u(150);
}
/***设置RF905为接收模式************************************************************/
void SetRxMode(void)
{
TX_EN=0;
TRX_CE=1;
Delay1u(250);// delay for mode change(>=650us)
Delay1u(250);
Delay1u(150);
}
/***发送数据***********************************************************************/
void T_sent(void)
{
uchar i ;
CSN=0 ;
SpiWrite(WTP) ;//写发送寄存器模式
for (i=0;i<32;i++) ;//将待发送数据写入RF905的发送寄存器
{
SpiWrite(TxBuf[i]) ; // Write 32 bytes Tx data
}
CSN=1 ; // Spi disable
Delay(1) ;
CSN=0 ; // Spi enable for write a spi
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
Delay(1) ; // while (DR!=1);
TRX_CE=0 ; // Set TRX_CE low
}
/***接收数据***********************************************************************/
void RxPacket(void)
{
uchar i;
TRX_CE=0; // Set nRF905 in standby mode
CSN=0; // Spi enable for write a spicommand
SpiWrite(RRP); // Read payload command
for (i=0;i<32;i++)
{
RxBuf[i]=SpiRead(); // Read data and save to buffer
}
CSN=1; // Disable spi
while(DR||AM);
TRX_CE=1;
}
/***结束****************************************************************************/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -