当前位置: 代码迷 >> Wireless >> NRF24L01无线模块发射程序解决思路
  详细解决方案

NRF24L01无线模块发射程序解决思路

热度:201   发布时间:2016-04-28 09:32:29.0
NRF24L01无线模块发射程序
最近从网上下了一NRF24L01无线模块发射程序,改了一下,准备用AT89S51单片机控制,但是运行之后没有反应(不知道模块是否正常运行)。麻烦大家给看一下问题出在哪,程序如下:
#include <reg51.h>
#include <intrins.h>
#include "api.h"

/***************************************************/
#define uchar unsigned char
#define TX_ADR_WIDTH    5   // 5 bytes TX(RX) address width
#define TX_PLOAD_WIDTH  1  // 1 bytes TX payload

uchar const TX_ADDRESS[TX_ADR_WIDTH]  = {0x34,0x43,0x10,0x10,0x01}; // Define a static TX address

uchar rx_buf[TX_PLOAD_WIDTH];
uchar tx_buf[TX_PLOAD_WIDTH];
uchar flag;
/**************************************************/
sbit CE =  P1^2;
sbit CSN=  P1^3;
sbit SCK=  P1^4;
sbit MOSI= P1^5;
sbit MISO= P1^6;
sbit IRQ = P3^2;
/**************************************************/
uchar  bdata sta;
sbit RX_DR =sta^6;
sbit TX_DS =sta^5;
sbit MAX_RT =sta^4;
/**************************************************/

/**************************************************/
#define KEY 0xaa
sbit p20=P2^0;
void init_io(void)
{
p20=0;                 //enable led
CE=0; // chip enable
CSN=1; // Spi disable
SCK=0; // Spi clock line init high
P0=0xff; // led close
}
/**************************************************/


/**************************************************
Function: init_int0();

Description:
  enable int0 interrupt;
/**************************************************/
void init_int0(void)
{
EA=1;
EX0=1; // Enable int0 interrupt.
}
/**************************************************/

/**************************************************/
void delay_10us(uchar x )
{
uchar i,j;
for(i=0;i<x;i++)
{
j=5;
while(j--);
}
}

/**************************************************/

/**************************************************/
void delay_ms(unsigned int x)
{
    unsigned int i,j;
    i=0;
    for(i=0;i<x;i++)
    {
       j=231;
           ;
       while(j--);
    }
}
/**************************************************/


/**************************************************/
uchar SPI_RW(uchar byte)
{
uchar bit_ctr;
    for(bit_ctr=0;bit_ctr<8;bit_ctr++)   // output 8-bit
    {
    MOSI = (byte & 0x80);         // output 'byte', MSB to MOSI
    byte = (byte << 1);           // shift next bit into MSB..
    SCK = 1;                      // Set SCK high..
    byte |= MISO;          // capture current MISO bit
    SCK = 0;               // ..then set SCK low again
    }
           return(byte);              // return read byte
}
/**************************************************/

/**************************************************/
uchar SPI_RW_Reg(BYTE reg, BYTE value)
{
uchar status;

   CSN = 0;                   // CSN low, init SPI transaction
   status = SPI_RW(reg);      // select register
   SPI_RW(value);             // ..and write value to it..
   CSN = 1;                   // CSN high again

   return(status);            // return nRF24L01 status byte
}
/**************************************************/

/**************************************************/
BYTE SPI_Read(BYTE reg)
{
BYTE reg_val;

   CSN = 0;                // CSN low, initialize SPI communication...
   SPI_RW(reg);            // Select register to read from..