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

📄 905收.h

📁 本源程序是针对单片无线收发品RF905编写的驱动程序
💻 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 + -