搜索
bottom↓
回复: 5

谁能帮我写一个51驱动nrf24l01的程序

[复制链接]

出0入0汤圆

发表于 2014-3-22 18:33:12 来自手机 | 显示全部楼层 |阅读模式
我用nrf搞了几天了,就是不对。我跑谁的例程都跑不对,我跪了,高中生表示很无力。
谁能帮我写个程序,把两个nrf接在一个51单片机上,如果正常就点亮一个led表示两个模块正常。
  各位大神可能在鄙视我是伸手党,我是真的无力了,我都搞了一周了,不管是我自己写的程序还是网上找的程序,运行结果都一样,都不正常,我真的无奈了。我的程序在让nrf发送数据后死活都不能在nrf中读到发送次数益出中断。(我只用了一个nrf,我的发送益出中断确实开了)网上所有人的例程都这样。
大神求助啊。能帮我写出一个单独nrf的程序,在发送数据后判断status寄存器数值对不对都行。
  如果还做不出来,我只能认为我的nrf模块都坏了。

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2014-3-22 18:44:53 | 显示全部楼层
先贴上你自己的程序,然后提出哪个地方不明白,大家才好帮你.

出0入0汤圆

发表于 2014-3-22 18:56:02 | 显示全部楼层
http://hi.baidu.com/txz01/item/db118a84b7df3728100ef312 跟着上面一步一步调。肯定行的

出0入0汤圆

发表于 2014-3-22 19:04:52 | 显示全部楼层
Puppey 发表于 2014-3-22 18:56
http://hi.baidu.com/txz01/item/db118a84b7df3728100ef312 跟着上面一步一步调。肯定行的

太详细了,如果当年看到这个资料,一定不用走那么多弯路了

出0入0汤圆

 楼主| 发表于 2014-3-22 23:54:39 来自手机 | 显示全部楼层
Puppey 发表于 2014-3-22 18:56
http://hi.baidu.com/txz01/item/db118a84b7df3728100ef312 跟着上面一步一步调。肯定行的

资料不错,正在看,我只想说网上的各种程序我没有成功一个,会不会是模块坏了?

出0入0汤圆

 楼主| 发表于 2014-3-23 14:11:22 | 显示全部楼层
lryxr2507 发表于 2014-3-22 18:44
先贴上你自己的程序,然后提出哪个地方不明白,大家才好帮你.

#include <reg52.h>
#include <intrins.h>
sbit MOSI=P3^4;
  sbit MISO=P3^3;
  sbit IRQ=P3^2;
  sbit  SCK=P3^5;
  sbit CSN=P3^6;
   sbit CE=P3^7;
void usart()
{TMOD = 0x20; // ???1???8???????, ???????
TH1=(unsigned char)(256 - (11059200 / (32L * 12L * 9600)));
TL1=(unsigned char)(256 - (11059200  / (32L * 12L * 9600)));    // ???0???
SCON = 0x50;
PCON = 0x00;   
TR1 = 1;
IE = 0x00; // ??????
}
#include <reg52.h>
#include <intrins.h>
typedef unsigned int uint;
typedef unsigned char uchar;
#define TX_ADDR_WITDH 5//?????????5???
#define RX_ADDR_WITDH 5//?????????5???
#define TX_DATA_WITDH 8//
#define RX_DATA_WITDH 8
#define R_REGISTER    0x00  // ????
#define W_REGISTER    0x20  // ????
#define R_RX_PLOAD    0x61  // ?RX FIFO????,1-32??,???????,?????,???????
#define W_TX_PLOAD    0xA0  // ?TX FIFO????,1-32??,??????0??,???????
#define FLUSH_TX    0xE1  // ??TX FIFO???,???????
#define FLUSH_RX    0xE2  // ??RX FIFO???,???????
#define REUSE_TX_PL 0xE3  // ???????????,?CE?????,???????????
#define NOP         0xFF  // ???,??????????
#define CONFIG      0x00  // ?????
#define EN_AA       0x01  // “????”????
#define EN_RX_ADDR  0x02  // ?????????
#define SETUP_AW    0x03  // ?????????
#define SETUP_RETR  0x04  // ?????????
#define RF_CH       0x05  // ???????????
#define RF_SETUP    0x06  // ???????
#define STATUS      0x07  // ?????
#define OBSERVE_TX  0x08  // ???????
#define CD          0x09  // ???????
#define RX_ADDR_P0  0x0A  // ????0???????
#define RX_ADDR_P1  0x0B  // ????1???????
#define RX_ADDR_P2  0x0C  // ????2???????
#define RX_ADDR_P3  0x0D  // ????3???????
#define RX_ADDR_P4  0x0E  // ????4???????
#define RX_ADDR_P5  0x0F  // ????5???????
#define TX_ADDR     0x10  // ???????
#define RX_PW_P0    0x11  // ????0???????????
#define RX_PW_P1    0x12  // ????1???????????
#define RX_PW_P2    0x13  // ????2???????????
#define RX_PW_P3    0x14  // ????3???????????
#define RX_PW_P4    0x15  // ????4???????????
#define RX_PW_P5    0x16  // ????5???????????
#define FIFO_STATUS 0x17  // FIFO?????
//*********************************************************************************
uchar sta;    // ????
#define RX_DR  (sta & 0x40)  // ????????
#define TX_DS  (sta & 0x20)  // ????????
#define MAX_RT (sta & 0x10)  // ????????

sbit LED=P2^4;
uchar code TX_Addr[]={0x34,0x43,0x10,0x10,0x01};
uchar code TX_Buffer[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x00};
uchar RX_Buffer[RX_DATA_WITDH];
void _delay_us(uint x)
{
uint i,j;
for (j=0;j<x;j++)
  for (i=0;i<12;i++);
}
void _delay_ms(uint x)
{
uint i,j;
for (j=0;j<x;j++)
  for (i=0;i<120;i++);
}
//nRF24L01???
void nRF24L01_Init(void)
{
CE=0;//?????
CSN=1;
SCK=0;
IRQ=1;
}
//SPI????
uchar SPI_RW(uchar byte)
{
uchar i;
for(i=0;i<8;i++)//???8???8???
{
  if(byte&0x80)//????????1
   MOSI=1;//?NRF24L01?1
  else //???0
   MOSI=0;
  byte<<=1;//????????
  SCK=1;//SCK??,??????,????????
  if(MISO)
   byte|=0x01;
  SCK=0;//SCK??
}
return byte;//???????
}
//SPI?????????
//reg:?????
//value:???(?)
uchar SPI_W_Reg(uchar reg,uchar value)
{
uchar status;//????
CSN=0;//SPI??
status=SPI_RW(reg);//???????,??????
SPI_RW(value);//?????
CSN=1;//
return status;//????
}
//SPI????
uchar SPI_R_byte(uchar reg)
{
uchar reg_value;
CSN=0;//SPI??
SPI_RW(reg);//????
reg_value=SPI_RW(0);//???????
CSN=1;
return reg_value;//??????
}
//SPI??RXFIFO?????
//reg:?????
//Dat_Buffer:????????
//DLen:????
uchar SPI_R_DBuffer(uchar reg,uchar *Dat_Buffer,uchar Dlen)
{
uchar status,i;
CSN=0;//SPI??
status=SPI_RW(reg);//???????,????
for(i=0;i<Dlen;i++)
{
  Dat_Buffer=SPI_RW(0);//????
}
CSN=1;
return status;
}
//SPI?TXFIFO???????
//reg:???????
//TX_Dat_Buffer:?????????
//Dlen:????
uchar SPI_W_DBuffer(uchar reg,uchar *TX_Dat_Buffer,uchar Dlen)
{
uchar status,i;
CSN=0;//SPI??,????
status=SPI_RW(reg);
for(i=0;i<Dlen;i++)
{
  SPI_RW(TX_Dat_Buffer);//????
}
CSN=1;
return status;
}
//??????
void nRF24L01_Set_TX_Mode(uchar *TX_Data)
{
CE=0;//??(????????????????????)
SPI_W_DBuffer(W_REGISTER+TX_ADDR,TX_Addr,TX_ADDR_WITDH);//??????+??????+????
SPI_W_DBuffer(W_REGISTER+RX_ADDR_P0,TX_Addr,TX_ADDR_WITDH);//??????????,????0?????????
SPI_W_DBuffer(W_TX_PLOAD,TX_Data,TX_DATA_WITDH);//???????+????+??????
SPI_W_Reg(W_REGISTER+EN_AA,0x01);//????0????
SPI_W_Reg(W_REGISTER+EN_RX_ADDR,0x01);//??????0
SPI_W_Reg(W_REGISTER+SETUP_RETR,0x0a);//??????250US+86US,??10?
SPI_W_Reg(W_REGISTER+RF_CH,0);//2.4GHZ
SPI_W_Reg(W_REGISTER+RF_SETUP,0x07);//1Mbps??,????:0DBM,????????
SPI_W_Reg(W_REGISTER+CONFIG,0x0e);//????,??,16?CRC??,CRC??
CE=1;//????
_delay_ms(5);//CE?????????10US??
}
//??????
uchar Check_Ack(void)
{
sta=SPI_R_byte(R_REGISTER+STATUS);//??????
if(TX_DS||MAX_RT)//??TX_DS?MAX_RT?1,????????TX_FIFO?????
{
  SBUF=0xaa;
  SPI_W_Reg(W_REGISTER+STATUS,0xff);
  CSN=0;
  SPI_RW(FLUSH_TX);//??????????????,?????
  CSN=1;
  return 0;
}
else{
//SBUF=0xbb;
  return 1;
}
}
void main(void)
{
uchar i;
P0=0xff;//???IO?
P1=0xff;
P2=0xff;
P3=0xff;
_delay_us(100);
usart();
nRF24L01_Init();//NRF24L01???
while(1)
{
  for(i=0;i<TX_DATA_WITDH-1;i++)//??7???
  {
   nRF24L01_Set_TX_Mode(&TX_Buffer);//????
   while(Check_Ack());//??????
    LED=0;
    _delay_us(5000);
    LED=1;
  }
}
}

回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 04:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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