#include"reg51.h"
#include"intrins.h"
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit MOSI = P3^3;
sbit MISO = P3^4;
sbit CLK = P3^2;
sbit CE = P3^0;
sbit CSN = P3^1;
sbit IRQ = P3^5;
/*************************************/
#define TX_ADR_WIDTH 5
#define RX_ADR_WIDTH 5
#define TX_PLOAD_WIDTH 5
#define RX_PLOAD_WIDTH 5
uint8 const t_address[]={0x01,0x01,0x01,0x01,0x01};
uint8 const r_address[]={0x10,0x10,0x10,0x10,0x10};
uint8 tbuf[5]={1,2,3,4,5};
uint8 rbuf[5];
/***********可位寻址*********************/
uint8 bdata sta;
sbit RX_DR=sta^6;
sbit TX_DS=sta^5;
sbit MAX_RT=sta^4;
/*************************************/
/*SPI指令*/
/*************************************/
#define R_REG 0x00
#define W_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
/*************************************/
/*寄存器地址*/
/*************************************/
#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_PW_P0 0x11
#define RX_PW_P1 0x12
#define RX_PW_P2 0x13
#define RX_PW_P3 0x14
#define RX_PW_P4 0x15
#define RX_PW_P5 0x16
#define FIFO_STATUS 0x17
void nrf_init();
uint8 spi_wr(uint8 uchar);
uint8 spi_read(uint8 reg);
uint8 wr_reg_com(uint8 reg,date);
uint8 r_reg_buf(uint8 reg,uint8 *pbuf,uint8 width);
uint8 w_reg_buf(uint8 reg,uint8 *pbuf,uint8 width);
void sent_data(uint8 *pbuf);
void delayus(uint8 us);
/***************************/
void delayus(uint8 us)
{
for(;us>0;us--)
_nop_();
}
uint8 spi_wr(uint8 uchar)
{
uint8 i;
for(i=0;i<8;i++)
{
MOSI=(uchar&0x80);
uchar<<=1;
CLK=1;
uchar|=MISO;
CLK=0;
}
return uchar;
}
uint8 spi_read(uint8 reg)
{
uint8 date;
CSN=0;
spi_wr(reg);
date=spi_wr(0);
CSN=1;
return date;
}
uint8 wr_reg_com(uint8 reg,date)
{
uint8 status;
CSN=0;
status=spi_wr(reg);
spi_wr(date);
CSN=1;
return status;
}
uint8 r_reg_buf(uint8 reg,uint8 *pbuf,uint8 width)
{
uint8 i,status;
CSN=0;
status=spi_wr(reg);
for(i=0;i<width;i++)
pbuf[i]=spi_wr(0);
CSN=1;
return status;
}
uint8 w_reg_buf(uint8 reg,uint8 *pbuf,uint8 width)
{
uint8 i,status;
CSN=0;
status=spi_wr(reg);
for(i=0;i<width;i++)
spi_wr(*pbuf++);
CSN=1;
return status;
}
void sent_data(uint8 *pbuf)
{
CE=0;
w_reg_buf(W_REG+RX_ADDR_P0,r_address,RX_ADR_WIDTH);
w_reg_buf(WR_TX_PLOAD,pbuf,TX_PLOAD_WIDTH);
wr_reg_com(W_REG+CONFIG,0x0e);
CE=1;
delayus(50);
}
void nrf_init()
{
delayus(100);
CE=0;
CSN=1;
CLK=0;
// IRQ=1;
w_reg_buf(W_REG+TX_ADDR,t_address,TX_ADR_WIDTH);
w_reg_buf(W_REG+RX_ADDR_P0,r_address,RX_ADR_WIDTH);
wr_reg_com(W_REG+EN_AA,0x00);
wr_reg_com(W_REG+EN_RXADDR,0x00);//打开通道0
// wr_reg_com(W_REG+SETUP_RETR,0x03); //关闭自动重发
wr_reg_com(W_REG+RF_CH,0);//频率
wr_reg_com(W_REG+RX_PW_P0,RX_PLOAD_WIDTH);//设置有效数据宽度
wr_reg_com(W_REG+RF_SETUP,0x07);
wr_reg_com(W_REG+CONFIG,0x0e);
}
void main()
{
uint8 TxBuf[20]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,
0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20};
nrf_init();
sent_data(TxBuf);
sent_data(TxBuf);
P0=spi_read(STATUS);
while(1);
}
在
单片机开发板上 P0口的led一直都不亮 ,求打神帮忙看看怎么改 不胜感激
模块外接引脚与普通nRF24L01+模块完全兼容。射频前端芯片的收发模式切换与掉电均可自动完成切换,无需用户干预也不用添加单独的控制引脚。用户原有的电路与代码无需改动即可直接使用。
产品特点
使用nRF24L01+作为无线收发单元。
2.4GHz全球免申请ISM工作频段。
工作频率范围2400MHz~2525MHz。
集成射频前端芯片,发射功率最高可达+22dBm。
外接引脚与普通nRF24L01+模块完全兼容。
支持2Mbps、1Mbps和250kbps传输速率。
独立的32字节RX FIFO和TX FIFO。
通过4线SPI接口与MCU连接,速率0~8Mbps,同时提高1个可屏蔽的中断输出引脚。
支持自动应答及自动重发,内置地址及CRC数据校验模功能。
SMA接口,可方便连接同轴电缆或外置天线。
工作电压范围:2.0V~3.6V。
工作温度范围:-40℃~+85℃
通讯距离:1800米
产品用途
ZQ-nRF24L01+PA远距离无线数传模块适用于多种无线通信的场合,如远距离无线数据传输系统、无线遥控、有源RFID、智能电网、智能家居等。
ZQ-nRF24L01 PA无线模块用户手册.pdf 下载积分: 积分 -1 分
445.59 KB, 下载次数: 3, 下载积分: 积分 -1 分
ZQ-nRF24L01 无线模块用户手册.pdf 下载积分: 积分 -1 分
543.88 KB, 下载次数: 17, 下载积分: 积分 -1 分
一周热门 更多>