久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2755|回復: 1
打印 上一主題 下一主題
收起左側

關于nrf24l01問題請教

[復制鏈接]
跳轉到指定樓層
樓主
ID:55570 發表于 2013-10-2 00:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本人剛剛學nrf24l01想弄一個簡單的程序試一下,程序的功能是按下一塊開放板的按鍵另一塊開放板的蜂鳴器就響,可是就是不成功,已經調試了兩周了,就是找不出問題所在,求大神指教!
程序如下:

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
//*********************************************NRF24L01*************************************
#define TX_ADR_WIDTH 5
#define RX_ADR_WIDTH 5
#define TX_PLOAD_WIDTH 20
#define RX_PLOAD_WIDTH 20
uchar const TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};
uchar rx_buf[TX_PLOAD_WIDTH];
uchar tx_buf[RX_PLOAD_WIDTH];

//****************************************IO端口定義***************************************
sbit IRQ=P1^3;
sbit CE=P1^4;
sbit MOSI=P1^5;
sbit SCK=P1^6;
sbit MISO=P1^7;
sbit CSN=P3^3;
sbit k1=P3^4;
sbit k2=P3^5;
sbit beep=P2^3;

//***************************************NRF24L01寄存器指令*******************************************************

#define READ_REG        0x00
#define WRITE_REG       0x20
#define RD_RX_PLOAD     0x61
#define WR_TX_PLOAD     0xa0
#define FLUSH_TX        0xe1
#define FLUSH_RX        0xe2
#define REUSE_TX_PL     0xe3
#define NOP             0Xff

//*************************************SPI(nRF24L01)寄存器地址****************************************************

#define CONFIG          0x00
#define EN_AA           0x01
#define EN_RXADDR       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
#define RX_ADDR_P1      0x0b
#define RX_ADDR_P2      0x0c
#define RX_ADDR_P3      0x0d
#define RX_ADDR_P4      0x0e
#define RX_ADDR_P5      0x0f
#define TX_ADDR         0x10
#define RX_RW_P0        0x11
#define RX_RW_P1        0x12
#define RX_RW_P2        0x13
#define RX_RW_P3        0x14
#define RX_RW_P4        0x15
#define RX_RW_P5        0x16
#define FIFO_STASTUS    0x17

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

uchar bdata sta ;
sbit RX_DR=sta^6;
sbit TX_DS=sta^5;
sbit MAX_RT=sta^4;

/******************************************************************************************
/*延時函數
/******************************************************************************************/

void inerDelay_us(uchar n)
{
for(;n>0;n--)
_nop_();
}

void delay()
{
uchar i,j;
for(j=20;j>0;j--)
for(i=248;i>0;i--);
}

//****************************************************************************************
/*NRF24L01初始化
//***************************************************************************************/

void init_io(void)
{
inerDelay_us(100);
CE=0;
CSN=1;
SCK=0;
}

/****************************************************************************************************
/*函數:uint SPI_RW(uchar byte)
/*功能:NRF24L01的SPI寫時序
/****************************************************************************************************/

uchar SPI_RW(uchar byte)
{
uchar bit_ctr;
for(bit_ctr=0;bit_ctr<8;bit_ctr++)
{
MOSI=(byte&0x80);
byte=(byte<<1);
SCK=1;
byte|=MISO;
SCK=0;
}
return(byte);
}
/****************************************************************************************************/
/*功能:NRF24L01讀寫寄存器函數
/****************************************************************************************************/

uchar SPI_RW_Reg(uchar reg,uchar value)
{
uchar status;
CSN=0;
status=SPI_RW(reg);
SPI_RW(value);
CSN=1;
return(status);
}

/****************************************************************************************************
/*函數:uchar SPI_Read(uchar reg)
/*功能:NRF24L01的SPI時序
/****************************************************************************************************/

uchar SPI_Read(uchar reg)
{
uchar reg_val;
CSN=0;
SPI_RW(reg);
reg_val=SPI_RW(0);
CSN=1;
return(reg_val);
}

/****************************************************************************************************/
/*函數:uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bytes)
/*功能: 用于讀數據,reg:為寄存器地址,pBuf:為待讀出數據地址,bytes:讀出數據的個數
/****************************************************************************************************/

uchar SPI_Read_Buf(uchar reg, uchar * pBuf, uchar bytes)
{
uchar status, i;
   CSN = 0;                    // CSN置低,開始傳輸數據
   status = SPI_RW(reg);       // 選擇寄存器,同時返回狀態字
   for(i=0; i<bytes; i++)
     pBuf = SPI_RW(0);    // 逐個字節從nRF24L01讀出
   CSN = 1;                    // CSN拉高,結束數據傳輸
   return(status);             // 返回狀態寄存器
}

/*********************************************************************************************************
/*函數:uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)
/*功能: 用于寫數據:為寄存器地址,pBuf:為待寫入數據地址,uchars:寫入數據的個數
/*********************************************************************************************************/

uchar SPI_Write_Buf(uchar reg,uchar *pBuf,uchar uchars)
{
uchar status,uchar_ctr;
CSN=0;
status=SPI_RW(reg);
for(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++)
SPI_RW(*pBuf++);
CSN=1;
return(status);
}

/****************************************************************************************************/
/*函數:void RX_Mode(void)
/*功能:數據接收配置
/****************************************************************************************************/

void RX_Mode(void)
{
CE=0;
SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);
SPI_RW_Reg(WRITE_REG+EN_AA,0x01);
SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);
SPI_RW_Reg(WRITE_REG+RF_CH,0x40);
SPI_RW_Reg(WRITE_REG+RX_RW_P0,TX_PLOAD_WIDTH);
SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);
SPI_RW_Reg(WRITE_REG+CONFIG,0x0f);
CE=1;
inerDelay_us(130);
}

/***********************************************************************************************************
/*函數:void nRF24L01_TxPacket(uchar * tx_buf)
/*功能:發送 tx_buf中數據
/**********************************************************************************************************/
/*

void nRF24L01_TxPacket(uchar *tx_buf)
{
CE=0;
SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);
SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);
SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);
SPI_RW_Reg(WRITE_REG+EN_AA,0x01);
SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);
SPI_RW_Reg(WRITE_REG+SETUP_RETR,0x1a);
SPI_RW_Reg(WRITE_REG+RF_CH,0x40);
SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);
SPI_RW_Reg(WRITE_REG+CONFIG,0x0e);
CE=1;
inerDelay_us(10);
sta=SPI_Read(STATUS);
SPI_RW_Reg(WRITE_REG+STATUS,sta);
}

/******************************************************************************************************/
/*函數:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
/*功能:數據讀取后放如rx_buf接收緩沖區中
/******************************************************************************************************/

uchar nRF24L01_RxPacket(uchar *rx_buf)
{
uchar revale=0;
sta=SPI_Read(STATUS);
if(RX_DR)
{
CE=0;
SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);
revale=1;
}
SPI_RW_Reg(WRITE_REG+STATUS,sta);
return revale;
}

//************************************主函數************************************************************

main()
{
init_io();
RX_Mode();
while(1)
{
if(k1==0)
{
delay();
if(k1==0)
{
tx_buf[0]=1;
nRF24L01_TxPacket(tx_buf);
}}
nRF24L01_RxPacket(rx_buf);
if(rx_buf[0]==1)
beep=0;
if(k2==0)
{
delay();
if(k2==0)
{
rx_buf[0]=0;
beep=1;
}}
}
  }



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:144022 發表于 2016-11-1 23:34 | 只看該作者
加油啊,我也在研究
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩福利 | 欧美日韩视频在线 | 91麻豆精品国产91久久久资源速度 | 男人天堂视频在线观看 | 亚洲欧美日韩中文在线 | 午夜小视频在线观看 | xx性欧美肥妇精品久久久久久 | 久久久久久亚洲精品 | 天天摸天天干 | 伊人久久大香线 | 日韩在线欧美 | 精品久久亚洲 | 国产特一级黄色片 | 黄网站免费观看 | 国产成人一区二区三区精 | av特级毛片| 成人区一区二区三区 | 日韩精品一区二区三区在线观看 | 97在线播放 | 一区二区精品 | 喷潮网站 | 国产a视频 | 成年人免费在线视频 | 亚洲国产一区在线 | 国产成人在线一区 | 九九色综合 | 国产精品不卡视频 | 免费国产一区二区 | 色综久久 | 91在线播 | 精品久久久久久久久久久久久 | 一区二区三区四区av | 亚洲精品久久久久久久久久久久久 | 日本不卡视频 | 日韩视频区| 中文字幕欧美日韩一区 | 一级h片| 久久高清 | 四虎影院久久 | 美女视频网站久久 | 成人三级影院 |