找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1898|回复: 2
打印 上一主题 下一主题
收起左侧

关于NRF905的收发程序与资料

[复制链接]
跳转到指定楼层
楼主
关于NRF905的收发
1.    将改程序下载到2个开发板
2.    然后按KEY后发送信息,发送完毕后LDE闪烁,对方受到信息后同样 闪烁
3.    而且两个开发板都可以做为发送和接收,一个做为发送,对应另一即为接收,实现及时双向通信

单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <ABSACC.h>
  4. #include <stdio.h>
  5. #define uint unsigned int
  6. #define uchar unsigned char
  7. #define BYTE_BIT0        0x01
  8. #define BYTE_BIT7        0x80
  9. bdata unsigned  char DATA_BUF;
  10. #define DATA7        ((DATA_BUF&BYTE_BIT7) != 0)
  11. #define DATA0   ((DATA_BUF&BYTE_BIT0) != 0)
  12. sbit        flag        =DATA_BUF^7;
  13. sbit        flag1        =DATA_BUF^0;
  14. #define TxRxBuf_Len 4
  15. unsigned char TxRxBuf[TxRxBuf_Len]={0x29,0x30,0x31,0x32,};
  16. code TxAddress[4]={0xcc,0xcc,0xcc,0xcc};
  17. char tf;
  18. sbit        TXEN=P1^4;

  19. sbit        PWR=P2^4;
  20. sbit    LEDnrf905=P2^7;
  21. sbit        CD=P2^5;
  22. sbit        AM=P2^6;
  23. sbit        MISO=P1^6;
  24. sbit        MOSI=P1^7;
  25. sbit        SCK=P1^5;
  26. sbit        CSN=P1^4;
  27. sbit        TRX_CE=P3^2;
  28. sbit        DR=P3^3;

  29. sbit        KEY=P3^4;
  30. #define WC                0x00
  31. #define RC                0x10
  32. #define WTP                0x20
  33. #define RTP                0x21
  34. #define WTA                0x22
  35. #define RTA                0x23
  36. #define RRP                0x24
  37. //------------------------------------------------NRF905寄存器配置------------------------------------------------
  38. unsigned char idata RFConf[11]=
  39. {
  40.   0x00,                             //配置命令//
  41.   0x4c,                             //CH_NO,配置频段在430MHZ
  42.   0x0c,                             //输出功率为10db,不重发,节电为正常模式
  43.   0x44,                             //地址宽度设置,为4字节
  44.   0x04,0x04,                        //接收发送有效数据长度为4字节
  45.   0xCC,0xCC,0xCC,0xCC,              //接收地址
  46.   0x58,                              //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
  47. };
  48. //================================================延时===========================================================
  49. void nrf905_Delay(int n)
  50. {
  51.         uint i;
  52.         while(n--)
  53.         for(i=0;i<80;i++);
  54. }
  55. //=================================================SPI读函数=======================================================
  56. unsigned char SpiRead(void)
  57. {
  58.         unsigned char j;
  59.         for (j=0;j<8;j++)
  60.         {
  61.         DATA_BUF=DATA_BUF<<1;
  62.                 SCK=1;
  63.                 if (MISO)        //读取最高位,保存至最末尾,通过左移位完成整个字节
  64.                 {
  65.                         DATA_BUF|=BYTE_BIT0;
  66.                 }
  67.                 else
  68.                 {
  69.                         DATA_BUF&=~BYTE_BIT0;
  70.                 }
  71.                 SCK=0;
  72.          }
  73.          return DATA_BUF;
  74. }
  75. void SpiWrite(unsigned char send)
  76. {
  77.         unsigned char i;
  78.         DATA_BUF=send;
  79.         for (i=0;i<8;i++)
  80.         {
  81.                 if (DATA7)        //总是发送最高位
  82.                 {
  83.                         MOSI=1;
  84.                 }
  85.                 else
  86.                 {
  87.                         MOSI=0;
  88.                 }
  89.                 SCK=1;
  90.                 DATA_BUF=DATA_BUF<<1;
  91.                 SCK=0;
  92.         }
  93. }
  94. //------------------------------------------------------初始化nRF905---------------------------------------------
  95. void nRF905Init(void)
  96. {
  97.     CSN=1;                                                
  98.         SCK=0;                                                
  99.         DR=1;                                                
  100.         AM=1;                                                
  101.         CD=1;                                                
  102.         PWR=1;                                       
  103.         TRX_CE=0;                                       
  104.         TXEN=0;                                       
  105. }
  106. //-----------------------------------------------------初始化寄存器-----------------------------------------------
  107. void Config905(void)
  108. {
  109.         uchar i;
  110.         CSN=0;                                
  111.         for (i=0;i<11;i++)    // Write configration words  写放配置字
  112.         {
  113.            SpiWrite(RFConf[i]);
  114.         }
  115.         CSN=1;                                        // Disable Spi
  116. }
  117. //-----------------------------------------------------发送数据打包---------------------------------------------------
  118. void TxPacket(uchar *TxRxBuf)
  119. {
  120.         uchar i;
  121.         CSN=0;
  122.         SpiWrite(WTP);                                // 写SPI指令
  123.         for (i=0;i<4;i++)
  124.         {
  125.                 SpiWrite(TxRxBuf[i]);        // 写32位传送指令
  126.         }
  127.         CSN=1;
  128.         nrf905_Delay(1);                        
  129.         CSN=0;                                                
  130.         SpiWrite(WTA);                                //写SPI地址
  131.         for (i=0;i<4;i++)                        // 写入与对方地址一样的地址
  132.         {
  133.                 SpiWrite(TxAddress[i]);
  134.         }
  135.         CSN=1;                                                
  136.         TRX_CE=1;                                       
  137.         nrf905_Delay(1);        
  138.         TRX_CE=0;                                
  139. }
  140. //----------------------------------------------设置发送初始状态---------------------------------------------
  141. void SetTxMode(void)
  142. {
  143.         TRX_CE=0;
  144.         TXEN=1;
  145.         nrf905_Delay(1);         //延时大于650us发送                                
  146. }
  147. //-----------------------------------------------设置接收初始化---------------------------------------------------
  148. void SetRxMode(void)
  149. {
  150.         TXEN=0;
  151.         TRX_CE=1;
  152.         nrf905_Delay(1);                                         
  153. }
  154. void RxPacket(void)                                                
  155. {
  156.         uchar i;
  157.     nrf905_Delay(100);
  158.     TRX_CE=0;
  159.         CSN=0;                                                // Spi enable for write a spi command
  160.     nrf905_Delay(1);
  161.         SpiWrite(RRP);
  162.         for (i = 0 ;i < 4 ;i++)
  163.         {
  164.                 TxRxBuf[i]=SpiRead();                // Read data and save to buffer      
  165.         }
  166.         CSN=1;
  167.     nrf905_Delay(10);
  168.         TRX_CE=1;                                                        
  169. }
  170. //--------------------------------------------------------数据接收------------------------------------------------
  171. void  RX(void)
  172. {
  173.           SetRxMode();        //  while (CheckDR()==0);  为了实现双向通信,就不能一直处于接收等待状态,所以注释掉
  174.                   nrf905_Delay(10);
  175.                     RxPacket();
  176.                   if(TxRxBuf[0]==0x29)
  177.                   {
  178.                                   LEDnrf905=0;
  179.                             nrf905_Delay(300);
  180.                                 LEDnrf905=1;
  181.                             nrf905_Delay(300);//接收到数据 后闪烁
  182.                   }
  183. }
  184. //-----------------------------------------------------------------------------------------------------------------
  185. void main(void)
  186. {
  187.         nRF905Init();
  188.         Config905();
  189.         LEDnrf905=1;
  190.         while(1)
  191.         {
  192.                 RX();
  193.                 if(KEY==0 )
  194.                 {        
  195.                         while(KEY==0);
  196.                         tf=1 ;
  197.                         TxRxBuf[0]=0x29;
  198.                 }
  199.                 if(tf==1)
  200.                 {
  201.                         SetTxMode();
  202.                         TxPacket(TxRxBuf);        // 发送命令数据
  203.                         LEDnrf905=0;
  204.                         nrf905_Delay(300);
  205.                         LEDnrf905=1;
  206.                         nrf905_Delay(300);                        //发送后LED闪烁
  207.                         tf=0;        
  208.                 }        
  209.         }
  210. }
复制代码

所有资料51hei提供下载:
RF905-无线调试板开发包.7z (3.73 MB, 下载次数: 37)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:747922 发表于 2020-5-9 20:35 | 只看该作者
1.01^365 = 1.222
回复

使用道具 举报

板凳
ID:425494 发表于 2021-3-19 08:18 | 只看该作者
想试一下,不过我没开发板
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表