AVR单片机的nRF24L01发送接收设计.doc

上传人:白大夫 文档编号:3249934 上传时间:2019-08-06 格式:DOC 页数:8 大小:38.50KB
返回 下载 相关 举报
AVR单片机的nRF24L01发送接收设计.doc_第1页
第1页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《AVR单片机的nRF24L01发送接收设计.doc》由会员分享,可在线阅读,更多相关《AVR单片机的nRF24L01发送接收设计.doc(8页珍藏版)》请在三一文库上搜索。

1、AVR单片机的nRF24L01发送接收设计#include “iom16v.h”#include “macros.h”#include “12864.h”/spi标志#define DDR_SPI DDRB#define DD_MOSI 5#define DD_MISO 6#define DD_SCK 7#define DD_SS 4#define CE PB3#define IRQ PB2/#define NRF24L01_MISOPB6/输入0#defineHign_24L01_MISOPORTB|=(1 PB6)#defineLow_24L01_MISOPORTB #defineRead

2、_24L01_MISOPINB /#define NRF24L01_MOSIPB5/输出1#defineHign_24L01_MOSIPORTB |= (1 PB5)#defineLow_24L01_MOSIPORTB #defineRead_24L01_MOSIPINB /#define NRF24L01_SCKPB7/输出1#defineHign_24L01_SCKPORTB |= (1 PB7)#defineLow_24L01_SCKPORTB #defineRead_24L01_SCKPINB /#define NRF24L01_CSNPB4/输出1#defineLow_24L01_C

3、SNPORTB #defineHign_24L01_CSNPORTB |= (1 PB4)/#define NRF24L01_CEPB3/输出1#defineHign_24L01_CEPORTB |= (1 PB3)#defineLow_24L01_CEPORTB #defineRead_24L01_CEPINB /*NRF24L01*#define TX_ADR_WIDTH5/ 发送地址长度,最大长度为5 5*8=40 bit#define RX_ADR_WIDTH5/ 接收地址长度#define TX_PLOAD_WIDTH32/ 发送字节长度,#define RX_PLOAD_WIDTH

4、32/ 接收字节长度uchar TX_ADDRESSTX_ADR_WIDTH=0x34,0x43,0x10,0x10,0x01;/发送地址uchar RX_ADDRESSRX_ADR_WIDTH=0x34,0x43,0x10,0x10,0x01; /接收地址/*NRF24L01寄存器指令*#define READ_REG0x00/ 读寄存器指令#define WRITE_REG0x20/ 写寄存器指令#define RD_RX_PLOAD0x61/ 读取接收数据指令#define WR_TX_PLOAD0xA0/ 写待发数据指令#define FLUSH_TX0xE1/ 冲洗发送 FIFO指令

5、#define FLUSH_RX0xE2/ 冲洗接收 FIFO指令#define REUSE_TX_PL0xE3/ 定义重复装载数据指令#define NOP0xFF/ 保留/*SPI(nRF24L01)寄存器地址*#define CONFIG0x00/ 配置收发状态,CRC校验模式以及收发状态响应方式#define EN_AA0x01/ 自动应答功能设置#define EN_RXADDR0x02/ 可用信道设置#define SETUP_AW0x03/ 收发地址宽度设置#define SETUP_RETR0x04/ 自动重发功能设置#define RF_CH0x05/ 工作频率设置#defi

6、ne RF_SETUP0x06/ 发射速率、功耗功能设置#define STATUS0x07/ 状态寄存器#define OBSERVE_TX0x08/ 发送监测功能#define CD0x09/ 地址检测#define RX_ADDR_P00x0A/ 频道0接收数据地址#define RX_ADDR_P10x0B/ 频道1接收数据地址#define RX_ADDR_P20x0C/ 频道2接收数据地址#define RX_ADDR_P30x0D/ 频道3接收数据地址#define RX_ADDR_P40x0E/ 频道4接收数据地址#define RX_ADDR_P50x0F/ 频道5接收数据地

7、址#define TX_ADDR0x10/ 发送地址寄存器#define RX_PW_P00x11/ 接收频道0接收数据长度#define RX_PW_P10x12/ 接收频道0接收数据长度#define RX_PW_P20x13/ 接收频道0接收数据长度#define RX_PW_P30x14/ 接收频道0接收数据长度#define RX_PW_P40x15/ 接收频道0接收数据长度#define RX_PW_P50x16/ 接收频道0接收数据长度#define FIFO_STATUS0x17/ FIFO栈入栈出状态寄存器设置/*/*/*void spi_init()初始化SPI/*void

8、 spi_init()Hign_24L01_CSN;DDR_SPI = (1DDR_SPISPCR=(1SPSR=0;/*/*uchar SPI_RW(uchar date)读写SPI/*uchar SPI_RW(uchar date)SPDR=date;while(!(SPSRreturn SPDR;/*/*uchar SPI_Read(uchar reg)读24L01寄存器/*uchar SPI_Read(uchar reg)uchar reg_val;Low_24L01_CSN;SPI_RW(reg);reg_val = SPI_RW(0);Hign_24L01_CSN;return(r

9、eg_val);/*/*uchar SPI_RW_Reg(uchar reg, uchar value)/写24L01寄存器/*uchar SPI_RW_Reg(uchar reg, uchar value)uchar status;Low_24L01_CSN;status = SPI_RW(reg);SPI_RW(value);Hign_24L01_CSN;return(status);/*/*uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bites)/读24L01 寄存器BUFF/*uchar SPI_Read_Buf(uchar reg

10、, uchar *pBuf, uchar bites)uint status1,uchar_ctr;Low_24L01_CSN;status1 = SPI_RW(reg);for(uchar_ctr=0;uchar_ctrpBufuchar_ctr = SPI_RW(0);Hign_24L01_CSN;return(status1);/*/*uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bites)/写24L01 寄存器BUFF/*uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bites

11、)uchar status1,uchar_ctr;Low_24L01_CSN;/SPI使能status1 = SPI_RW(reg);for(uchar_ctr=0; uchar_ctrSPI_RW(*pBuf+);Hign_24L01_CSN;/关闭SPIreturn(status1);/*/*void SetRX_Mode(void)/接收模式设置/*void SetRX_Mode(void)Low_24L01_CE;SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); /写接收地址SPI_RW_Reg(WRITE

12、_REG + EN_AA, 0x01);/0通道自动应答SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);/数据通道0SPI_RW_Reg(WRITE_REG + RF_CH,0);/射频通道SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH);/写通道0 接受数据长度SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); /0db 1MSPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); /接收模式Hign_24L01_CE;/开始接收delayus(200);/注意不能太

13、小/*/*uchar nRF24L01_RxPacket(uchar* rx_buf)/接收数据包/*uchar nRF24L01_RxPacket(uchar* rx_buf)uchar sta,flag=0;sta=SPI_Read(STATUS);/ 读取状态寄存其来判断数据接收状况if(staLow_24L01_CE;/ StandBy I模式SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);/ read receive payload from RX_FIFO bufferflag =1;/读取数据完成标志SPI_RW_Reg(WRITE

14、_REG+STATUS,sta);/接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志return (flag);/*/*void nRF24L01_TxPacket(uchar * tx_buf)/发送数据包/*void nRF24L01_TxPacket(uchar * tx_buf)uchar sta=0;uchar flag=0;Low_24L01_CE;/StandBy I模式SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);SPI_Write_Buf(WRITE_REG + RX

15、_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, 0x1f); /500+86usSPI_RW_Reg(WRITE_REG + RF_CH, 0);/SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);/SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);/ IRQ收发完成中断响应,16位CRC,主发送delayms(2);Hign_24L01_CE;/置高CE,激发数据发送delayus(10);Low_24L01_CE;void init_NRF24L01(void)spi_init();Low_24L01_CE;/ 空闲模式Hign_24L01_CSN;/ SPI 关闭Low_24L01_SCK;/ 关闭时钟

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1