nrf905!

2019-07-18 15:53发布

为什么我今天早上用nrf905还可以通信,到了下午就不行了呢?
谁能帮忙找找问题,找了一晚上了,还是不行!!!
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
//SPI接口指令的宏定义
#define WC   0X00
#define RC   0X10
#define WTP  0X20
#define RTP  0X21
#define WTA  0X22
#define RTA  0X23
#define RRP  0X24
sbit TRX_CE=P1^0;
sbit AM=P1^1;
sbit MISO=P1^2;
sbit SCK=P1^3;
sbit TX_EN=P1^4;  
sbit PWR_UP=P1^5;
sbit CD=P1^6;  
sbit DR=P1^7;
sbit MOSI=P2^6;
sbit CSN=P2^7;
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit P2_4=P2^4;
uchar DATA_BUF;
uchar TxBuf[2]={0xf0,0xf1};
uchar RxBuf[4];
//NRF905寄存器配置参数
uchar code RFconf[11]={
  0x00,                             //配置命令
  0x4c,                             //CH_NO,配置频段在423MHZ
  0x0C,                             //输出功率为10db,不重发,节电为正常模式
  0x44,                             //地址宽度设置,为4字节
  0x04,0x04,                        //接收发送有效数据长度为4字节
  0xCC,0xCC,0xCC,0xCC,              //接收地址
  0x58
};
//接收地址
uchar code tx_add[4]={0xcc,0xcc,0xcc,0xcc};
void delay(uint z)
{
uchar x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
//SPI写操作
void spi_write(uchar byte)
{
uchar i;
DATA_BUF=byte;
for(i=0;i<8;i++)
{
  if(DATA_BUF&0X80)
   MOSI=1;
  else
   MOSI=0;
  SCK=1;
  DATA_BUF=DATA_BUF<<1;
  SCK=0;
}
}
/*
//SPI读操作
uchar spi_read()
{
uchar i;
for(i=0;i<8;i++)
{
  DATA_BUF=DATA_BUF<<1;
  SCK=1;
  if(MISO)
   DATA_BUF|=0X01;
  else
   DATA_BUF&=0XFE;
  SCK=0;
  delay1();
}
return DATA_BUF;
}
*/
//主机通过SPI接口向905配置寄存器写入信息
void Config905()
{
uchar i;
CSN=0;
for(i=0;i<11;i++)
{
  spi_write(RFconf[i]);
}
CSN=1;
}
//发送数据包
void tx_packet()
{
uchar i;
CSN=0;  
spi_write(WTP);
spi_write(TxBuf[0]);
spi_write(TxBuf[1]);
CSN=1;
delay(1);
CSN=0;
spi_write(WTA);
for(i=0;i<4;i++)
{
  spi_write(tx_add[i]);
}
CSN=1;
TRX_CE=1;
delay(1);
TRX_CE=0;
// while(!DR);
}
/*
//接收数据包
void rx_packet()
{
uchar i;
TRX_CE=0;
CSN=0;
spi_write(RRP);
for(i=0;i<4;i++)
{
  RxBuf[i]=spi_read();
}
CSN=1;
while(DR||AM);
TRX_CE=1;
}
*/
//设置为发送模式
void set_tx_mode()
{
TX_EN=1;
TRX_CE=0;
delay(1);
}
/*
//设置为接收模式
void set_rx_mode()
{
TX_EN=0;
TRX_CE=1;
delay(5);
}
*/
//NRF905初始化
void nrf_init()
{  
    CSN=1;                      // Spi  disable                    
    SCK=0;                      // Spi clock line init high
    DR=0;                       // Init DR for input                 
    PWR_UP=1;                   // nRF905 power on
    TRX_CE=0;                   // Set nRF905 in standby mode
    TX_EN=0;                    // set radio in Rx mode
Config905();
}
/*
//CPU初始化
void cpu_init()
{
TMOD=0X20;
TL1=0XFD;
TH1=0XFD;
SCON=0XD8;//工作方式3,SM2=1,TB8=1;
TR1=1;
P0=DISBUFF;;
}
*/
/*
void send(uchar c)
{
SBUF=c;
while(!ti);
TI=0;
}
*/
void main()
{
// cpu_init();
nrf_init();
P2_4=0;
while(1)
{
  if(P2_0==0)
  {
   delay(5);
   if(P2_0==0)
   {
    while(!P2_0);
    set_tx_mode();
    tx_packet();
    CD=0;
   }
  }         
}
}

从机程序
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define WC   0X00
#define RC   0X10
#define WTP  0X20
#define RTP  0X21
#define WTA  0X22
#define RTA  0X23
#define RRP  0X24
sbit TRX_CE=P1^0;
sbit AM=P1^1;
sbit MISO=P1^2;
sbit SCK=P1^3;
sbit TX_EN=P1^4;  
sbit PWR_UP=P1^5;
sbit CD=P1^6;  
sbit DR=P1^7;
sbit MOSI=P2^6;
sbit CSN=P2^7;
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit P2_4=P2^4;
uchar DATA_BUF;
uchar RxBuf[4];

uchar code RFconf[11]={
  0x00,                             //配置命令//
  0x4c,                             //CH_NO,配置频段在423MHZ
  0x0C,                             //输出功率为10db,不重发,节电为正常模式
  0x44,                             //地址宽度设置,为4字节
  0x04,0x04,                        //接收发送有效数据长度为4字节
  0xCC,0xCC,0xCC,0xCC,              //接收地址
  0x58
};
uchar tx_add[4]={0xcc,0xcc,0xcc,0xcc};
void delay(uint z)
{
uchar x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void spi_write(uchar byte)
{
uchar i;
DATA_BUF=byte;
for(i=0;i<8;i++)
{
  if(DATA_BUF&0X80)
   MOSI=1;
  else
   MOSI=0;
  SCK=1;
  DATA_BUF=DATA_BUF<<1;
  SCK=0;
}
}
uchar spi_read()
{
uchar i;
for(i=0;i<8;i++)
{
  DATA_BUF=DATA_BUF<<1;
  SCK=1;
  if(MISO)
   DATA_BUF|=0X01;
  else
   DATA_BUF&=0XFE;
  SCK=0;
  delay(1);
}
return DATA_BUF;
}
void Config905()
{
uchar i;
CSN=0;
for(i=0;i<11;i++)
{
  spi_write(RFconf[i]);
}
CSN=1;
}

void rx_packet()
{
uchar i;
TRX_CE=0;
CSN=0;
spi_write(RRP);
for(i=0;i<4;i++)
{
  RxBuf[i]=spi_read();
}
CSN=1;
while(DR||AM);
TRX_CE=1;
}
/*
void set_tx_mode()
{
TX_EN=1;
TRX_CE=0;
delay(5);
}
*/
void set_rx_mode()
{
TX_EN=0;
TRX_CE=1;
delay(1);
}
void nrf_init()
{  
    CSN=1;                      // Spi  disable                    
    SCK=0;                      // Spi clock line init high
    DR=1;                       // Init DR for input
    AM=1;                       // Init AM for input
    PWR_UP=1;                   // nRF905 power on
    TRX_CE=0;                   // Set nRF905 in standby mode
    TX_EN=0;                    // set radio in Rx mode
Config905();
}
void main()
{
  nrf_init();
  while(1)
  {
   set_rx_mode();
     rx_packet();
  P0=RxBuf[0];
  delay(1000);
  P0=RxBuf[1];
  delay(1000);
  }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
lstcspring
1楼-- · 2019-07-18 17:51
  这种一般是硬件问题,自己找一下
wxl900306
2楼-- · 2019-07-18 23:45
 精彩回答 2  元偷偷看……
yshuo0906
3楼-- · 2019-07-19 01:12
18736093209
4楼-- · 2019-07-19 06:50
怎么在proteus里弄nrf905的元件?
小严
5楼-- · 2019-07-19 11:38
18736093209 发表于 2013-1-12 17:51
怎么在proteus里弄nrf905的元件?

你有弄成功嘛?  求指导

一周热门 更多>