#include <reg52.h>
//***************************************NRF24L01寄存器指令*******************************************************
#define READ_REG 0x00 // 读寄存器指令
#define WRITE_REG 0x20 // 写寄存器指令
#define RD_RX_PLOAD 0x61 // 读取接收数据指令
#define WR_TX_PLOAD 0xA0 // 写待发数据指令
#define FLUSH_TX 0xE1 // 冲洗发送 FIFO指令
#define FLUSH_RX 0xE2 // 冲洗接收 FIFO指令
#define REUSE_TX_PL 0xE3 // 定义重复装载数据指令
#define NOP 0xFF // 保留
//*************************************SPI(nRF24L01)寄存器地址****************************************************
#define CONFIG 0x00 // 配置收发状态,CRC校验模式以及收发状态响应方式
#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 // 频道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 // 接收频道0接收数据长度
#define RX_PW_P2 0x13 // 接收频道0接收数据长度
#define RX_PW_P3 0x14 // 接收频道0接收数据长度
#define RX_PW_P4 0x15 // 接收频道0接收数据长度
#define RX_PW_P5 0x16 // 接收频道0接收数据长度
#define FIFO_STATUS 0x17 // FIFO栈入栈出状态寄存器设置
//**************************************************************************************
#define uchar unsigned char
#define uint unsigned int
/********************端口定义**************************************************/
sbit CE = P1^0;
sbit CSN= P1^1;
sbit SCK= P1^2;
sbit MOSI= P1^3;
sbit MISO= P1^4;
sbit IRQ = P1^5;
//sbit key= P3^3;
//sbit led= P2^0;
uchar flag;
/******************************************************************************/
/***************************************************/
#define TX_ADR_WIDTH 5 // 5字节宽度的发送/接收地址
#define TX_PLOAD_WIDTH 4 // 数据通道有效数据宽度
uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01}; // 定义一个静态发送地址
uchar RX_BUF[TX_PLOAD_WIDTH];
uchar TX_BUF[TX_PLOAD_WIDTH];
uchar DATA1 = 211;
uchar DATA2 = 200;
uchar DATA3 = 233;
uchar DATA4 = 222;
uchar bdata sta,tt;
sbit RX_DR = sta^6;
sbit TX_DS = sta^5;
sbit MAX_RT = sta^4;
/*************************************************/
/**************************************************
函数: init_io()
描述:
初始化IO
/**************************************************/
void init_io(void)
{
CE = 0; // 待机
CSN = 1; // SPI禁止
SCK = 0; // SPI时钟置低
IRQ = 1; // 中断复位
}
/**************************************************/
/**************************************************
函数:delay_ms()
描述:
延迟x毫秒
/**************************************************/
void delay_ms(uchar x)
{
uchar i, j;
i = 0;
for(i=0; i<x; i++)
{
j = 250;
while(--j);
j = 250;
while(--j);
}
}
/**************************************************/
/**************************************************
函数:SPI_RW()
描述:
根据SPI协议,写一字节数据到nRF24L01,同时从nRF24L01
读出一字节
/**************************************************/
uchar SPI_RW(uchar byte)
{
uchar i;
for(i=0; i<8; i++) // 循环8次
{
MOSI = (byte & 0x80); // byte最高位输出到MOSI
byte <<= 1; // 低一位移位到最高位
SCK = 1; // 拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据
byte |= MISO; // 读MISO到byte最低位
SCK = 0; // SCK置低
}
return(byte); // 返回读出的一字节
}
/**************************************************/
/**************************************************
函数:SPI_RW_Reg()
描述:
写数据value到reg寄存器
/**************************************************/
uchar SPI_RW_Reg(uchar reg, uchar value)
{
uchar status;
CSN = 0; // CSN置低,开始传输数据
status = SPI_RW(reg); // 选择寄存器,同时返回状态字
SPI_RW(value); // 然后写数据到该寄存器
CSN = 1; // CSN拉高,结束数据传输
return(status); // 返回状态寄存器
}
/**************************************************/
/**************************************************
函数:SPI_Read()
描述:
从reg寄存器读一字节
/**************************************************/
uchar SPI_Read(uchar reg)
{
uchar reg_val;
CSN = 0; // CSN置低,开始传输数据
SPI_RW(reg); // 选择寄存器
reg_val = SPI_RW(0); // 然后从该寄存器读数据
CSN = 1; // CSN拉高,结束数据传输
return(reg_val); // 返回寄存器数据
}
/**************************************************/
/**************************************************
函数:SPI_Read_Buf()
描述:
从reg寄存器读出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[i] = SPI_RW(0); // 逐个字节从nRF24L01读出
CSN = 1; // CSN拉高,结束数据传输
return(status); // 返回状态寄存器
}
/**************************************************/
/**************************************************
函数:SPI_Write_Buf()
描述:
把pBuf缓存中的数据写入到nRF24L01,通常用来写入发
射通道数据或接收/发送地址
/**************************************************/
uchar SPI_Write_Buf(uchar reg, uchar * pBuf, uchar bytes)
{
uchar status, i;
CSN = 0; // CSN置低,开始传输数据
status = SPI_RW(reg); // 选择寄存器,同时返回状态字
for(i=0; i<bytes; i++)
SPI_RW(pBuf[i]); // 逐个字节写入nRF24L01
CSN = 1; // CSN拉高,结束数据传输
return(status); // 返回状态寄存器
}
/**************************************************/
/**************************************************
函数:RX_Mode()
描述:
这个函数设置nRF24L01为接收模式,等待接收发送设备的数据包
/**************************************************/
void RX_Mode(void)
{
CE = 0;
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 接收设备接收通道0使用和发送设备相同的发送地址
SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // 使能接收通道0自动应答
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 使能接收通道0
SPI_RW_Reg(WRITE_REG + RF_CH, 40); // 选择射频通道0x40
SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); // 接收通道0选择和发送通道相同有效数据宽度
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); // 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // CRC使能,16位CRC校验,上电,接收模式
CE = 1; // 拉高CE启动接收设备
}
/**************************************************/
/**************************************************
函数:TX_Mode()
描述:
这个函数设置nRF24L01为发送模式,(CE=1持续至少10us),
130us后启动发射,数据发送结束后,发送模块自动转入接收
没有合适的资源?快使用搜索试试~ 我知道了~
NRF24L01无线模块接收发送程序
共67个文件
bak:13个
h:8个
obj:6个
需积分: 49 15 下载量 2 浏览量
2014-11-13
18:25:07
上传
评论 3
收藏 4.74MB ZIP 举报
温馨提示
这是我参加比赛所使用的源程序,我相信一定会给使用者带来很大的帮助,谢谢。
资源推荐
资源详情
资源评论
收起资源包目录
NRF24l01无线模块.zip (67个子文件)
NRF24l01无线模块
NRF24l01发送接收程序
接收程序11
接收程序_uvopt.bak 54KB
接收程序.uvproj 13KB
接收数据_uvopt.bak 53KB
接收数据.plg 151B
接收程序.M51 15KB
接收程序 13KB
接收程序.plg 153B
接收程序.hex 2KB
接收数据_uvproj.bak 0B
接收程序_uvproj.bak 0B
接收程序.lnp 33B
接收数据.c 11KB
接收数据.uvopt 53KB
接收程序.uvopt 54KB
接收数据.OBJ 15KB
接收数据.LST 723B
发送程序
程序_uvopt.bak 54KB
程序.OBJ 15KB
程序.plg 147B
程序.c 11KB
程序.uvproj 13KB
程序.hex 2KB
程序.M51 15KB
程序.LST 18KB
程序.lnp 25B
程序.uvopt 54KB
程序_uvproj.bak 13KB
程序 13KB
NRF24L01无线透传模块
相关资料
nRF24L01P.PDF 1.08MB
STC15F204EA-series-chinese.pdf 5.15MB
原理图
STC15L204_NRF24L01.pdf 122KB
测试程序
STC15L204EA_NRF24L01
NRF_24L01.LST 15KB
delay.OBJ 2KB
MAIN.LST 5KB
NRF_24L01_BASE_uvopt.bak 60KB
NRF_24L01_BASE.uvgui.Administrator 109KB
NRF_24L01_BASE_Uv2.Bak 2KB
NRF_24L01_BASE_Opt.Bak 2KB
NRF_24L01_BASE_uvproj.bak 13KB
MAIN.OBJ 12KB
NRF_24L01_BASE.opt.bak 2KB
NRF_24L01.H 4KB
NRF_24L01_BASE.uvgui_Administrator.bak 106KB
NRF_24L01_BASE 35KB
reg51.h 9KB
NRF_24L01_BASE.Uv2.bak 2KB
UART.OBJ 5KB
UART.C 2KB
gpio.h 866B
config.h 73B
NRF_24L01_BASE.uvproj 13KB
NRF_24L01.C 9KB
STC5A60S2.H 17KB
typedef.h 446B
UART.LST 4KB
NRF_24L01_BASE.M51 25KB
NRF_24L01_BASE.lnp 95B
NRF_24L01.OBJ 19KB
NRF_24L01_BASE.plg 974B
delay.c 785B
delay.LST 2KB
NRF_24L01_BASE.uvopt 60KB
delay.h 1KB
UART.H 185B
NRF_24L01_BASE.hex 4KB
MAIN.C 2KB
NRF_24L01_BASE.hex 4KB
共 67 条
- 1
资源评论
扫地的小小张
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功