nrf905收发程序

HDL语言及源代码

6人已加入

描述

  nRF905无线芯片是由挪威NORDIC公司出品的低于1GHz无线数传芯片,主要工作于433MHz、868MHz和915MHz的ISM频段。芯片内置频率合成器、功率放大器、晶体振荡器和调制器等功能模块,输出功率和通信频道可通过程序进行配置。非常适合于低功耗、低成本的系统设计。

  nrf905收发程序

  在这里把以前写的程序粘贴上来 电路就不贴了,因为当时拿到的是现成板

  也没电路图,当时所花的时候也较多才写出程序,主要是因为当时引脚没注意电压

  只是单纯地用示波器来测那几个引脚波形 结果是相当的悲剧!!

  当时用的时两个nrf905,一个作发射,一个作接收

  程序如下:

  发送部分:

  //*************此程序为nRF905的发送程序***********

  #include 《reg52.h》

  #include 《intrins.h》

  #define uchar unsigned char

  #define uint unsigned int

  //*******************定义命令字**********************

  #define WC 0x00 // Write configuration register

  command

  #define RC 0x10 // Read configuration register

  command

  #define WTP 0x20 // Write TX Payload command

  #define RTP 0x21 // Read TX Payload command

  #define WTA 0x22 // Write TX Address command

  #define RTA 0x23

  //*******************管脚配置*********

  sbit MOSI=P2^0;

  sbit CSN=P2^3;

  sbit SCK=P2^6;

  sbit MISO=P2^7;

  sbit TRX_CE=P0^5;

  sbit TXEN=P0^3;

  sbit PWR=P0^2;

  sbit DR=P0^0;

  uchar Txbuf[4]={0xf9,0xa4,0xb0,0x99};

  uchar

  Rfconfig[10]={0x4c,0x0e,0x44,0x04,0x04,0xe7,0xe7,0xe7,0xe7,0xde};

  //------------------------------------------------

  void delay(uint x)

  {

  uint i;

  for(i=0;i《x;i++)

  {

  _nop_();

  }

  }

  //------------------------------------------------

  void Spiwrite(uchar dat)

  {

  uchar i=8;

  while(i--)

  {

  delay(10);

  SCK=0;

  MOSI=(bit)(dat&0x80);

  dat《《=1;

  delay(10);

  SCK=1;

  delay(10);

  SCK=0;

  }

  SCK=0;

  }

  //------------------------------------------------

  void Txpacket(void)

  {

  TXEN=1;

  CSN=0;

  Spiwrite(0x22);

  Spiwrite(0xe7);

  Spiwrite(0xe7);

  Spiwrite(0xe7);

  Spiwrite(0xe7);

  CSN=1;

  _nop_();

  _nop_();

  CSN=0;

  Spiwrite(0x20);

  Spiwrite(Txbuf[0]);

  Spiwrite(Txbuf[1]);

  Spiwrite(Txbuf[2]);

  Spiwrite(Txbuf[3]);

  CSN=1; _nop_();

  _nop_();

  TRX_CE=1;

  delay(50);

  // TRX_CE=0;

  while(!DR);

  }

  //--------------------------------------------------

  void ini_system(void)

  {

  uchar i;

  CSN=1;

  SCK=0;

  PWR=1; // PWR_UP | TRX_CE |TXEN | M O D E

  TRX_CE=0; // 1 | 0 | 0 | SPI Programming

  TXEN=0;

  _nop_();

  CSN=0;

  Spiwrite(0x00);

  for(i=0;i《10;i++)

  {

  Spiwrite(Rfconfig[i]);

  }

  CSN=1;

  }

  //-------------------------------------------------

  void setmode()

  {

  PWR=1; // PWR_UP TRX_CE TXEN MODE

  TRX_CE=1; // 1 1 1 SHOCKBURST TX

  TXEN=1;

  delay(1000); //time must be 》=650us

  }

  //-----------------------------------------------------

  void main()

  {

  ini_system();

  while(1)

  {

  setmode();

  Txpacket();

  }

  }

  接收程序:

  /*****接收时用数码管显示接收到的数据**********/

  #include 《reg52.h》

  #include 《intrins.h》

  #define uchar unsigned char

  #define uint unsigned int

  #define led P0

  #define WC 0x00

  #define RC 0x10

  #define WTP 0x20

  #define RTP 0x21

  #define WTA 0x22

  #define RTA 0x23

  #define RRP 0x24 sbit TXEN=P3^5;

  sbit TRX_CE=P3^4;

  sbit PWR=P3^6;

  sbit MISO=P3^0;

  sbit MOSI=P1^2;

  sbit SCK=P1^4;

  sbit CSN=P1^3;

  sbit DR=P1^1;

  sbit CD=P1^0;

  sbit key1=P2^0;

  sbit key2=P2^1;

  sbit key3=P2^2;

  sbit led1=P2^3;

  sbit led2=P2^5;

  sbit led3=P2^6;

  sbit led4=P2^7;

  unsigned char Rxbuf[4]={0xf9};

  unsigned char

  Rfconfig[10]={0x4c,0x0e,0x44,0x04,0x04,0xe7,0xe7,0xe7,0xe7,0xde};

  void delay(uint x)

  {

  uint i;

  for(i=0;i《x;i++)

  {

  _nop_();

  }

  }

  void Spiwrite(uchar dat)

  {

  uchar i=8;

  while(i--)

  {

  delay(10); SCK=0;

  MOSI=(bit)(dat&0x80);

  dat《《=1;

  delay(10);

  SCK=1;

  delay(10);

  SCK=0;

  }

  SCK=0;

  }

  unsigned char Spiread(void)

  {

  uchar i=8;

  uchar ddat;

  while(i--)

  {

  ddat《《=1;

  SCK=0; _nop_();

  _nop_();

  ddat|=MISO;

  SCK=1;

  _nop_();

  _nop_();

  }

  SCK=0;

  return ddat;

  }

  void Rxpacket(void)

  {

  unsigned char j=0;

  TRX_CE=0;

  PWR=1;

  CSN=0;

  Spiwrite(RRP);

  for(j=0;j《4;j++)

  {

  Rxbuf[j]=Spiread();

  }

  CSN=1;

  }

  void ini_system(void)

  {

  uchar i;

  CSN=1;

  SCK=0;

  PWR=1;

  // PWR_UP | TRX_CE |TXEN | M O D E TRX_CE=0;

  // 1 | 0 | 0 | SPI Programming

  TXEN=0;

  _nop_();

  CSN=0;

  Spiwrite(WC);

  for(i=0;i《10;i++)

  {

  Spiwrite(Rfconfig[i]);

  }

  CSN=1;

  }

  void setmode()

  {

  PWR=1;

  // PWR_UP TRX_CE TXEN MODE TRX_CE=1;

  // 1 1 0 SHOCKBURST RX TXEN=0;

  delay(300);

  //time must be 》=650us

  }

  void display()

  {

  led1=0;

  led2=1;

  led3=1;

  led4=1;

  led=Rxbuf[0];

  delay(1);

  led1=1;

  led2=0;

  led3=1;

  led4=1;

  led=Rxbuf[1];

  delay(1);

  led1=1;

  led2=1;

  led3=0;

  led4=1;

  led=Rxbuf[2];

  delay(1);

  led1=1;

  led2=1;

  led3=1;

  led4=0;

  led=Rxbuf[3];

  delay(1);

  }

  void main()

  {

  ini_system();

  setmode();

  while(1)

  {

  Rxpacket();

  while(!DR);

  display();

  }

  }

  接收程序:

  /*****接收时用数码管显示接收到的数据**********/

  #include 《reg52.h》

  #include 《intrins.h》

  #define uchar unsigned char

  #define uint unsigned int

  #define led P0

  #define WC 0x00

  #define RC 0x10

  #define WTP 0x20

  #define RTP 0x21

  #define WTA 0x22

  #define RTA 0x23

  #define RRP 0x24 sbit TXEN=P3^5;

  sbit TRX_CE=P3^4;

  sbit PWR=P3^6;

  sbit MISO=P3^0;

  sbit MOSI=P1^2;

  sbit SCK=P1^4;

  sbit CSN=P1^3;

  sbit DR=P1^1;

  sbit CD=P1^0;

  sbit key1=P2^0;

  sbit key2=P2^1;

  sbit key3=P2^2;

  sbit led1=P2^3;

  sbit led2=P2^5;

  sbit led3=P2^6;

  sbit led4=P2^7;

  unsigned char Rxbuf[4]={0xf9};

  unsigned char

  Rfconfig[10]={0x4c,0x0e,0x44,0x04,0x04,0xe7,0xe7,0xe7,0xe7,0xde};

  void delay(uint x)

  {

  uint i;

  for(i=0;

  i《x;i++)

  {

  _nop_();

  }

  }

  void Spiwrite(uchar dat)

  {

  uchar i=8;

  while(i--)

  {

  delay(10);

  SCK=0;

  MOSI=(bit)(dat&0x80);

  dat《《=1; delay(10);

  SCK=1; delay(10);

  SCK=0;

  }

  SCK=0;

  }

  unsigned char Spiread(void)

  {

  uchar i=8;

  uchar ddat; while(i--)

  {

  ddat《《=1; SCK=0;

  _nop_();

  _nop_();

  ddat|=MISO;

  SCK=1;

  _nop_()

  ;_nop_();

  } SCK=0;

  return ddat;

  }

  void Rxpacket(void)

  {

  unsigned char j=0;

  TRX_CE=0;

  PWR=1;

  CSN=0;

  Spiwrite(RRP);

  for(j=0;

  j《4;j++)

  {

  Rxbuf[j]=Spiread();

  }

  CSN=1;

  }

  void ini_system(void)

  {

  uchar i;

  CSN=1;

  SCK=0;

  PWR=1;

  // PWR_UP | TRX_CE |TXEN | M O D E TRX_CE=0;

  // 1 | 0 | 0 | SPI Programming TXEN=0; _nop_();

  CSN=0;

  Spiwrite(WC);

  for(i=0;i《10;i++)

  {

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分