NRF24L01 MSP430发送接收程序word文档良心出品Word格式.docx
《NRF24L01 MSP430发送接收程序word文档良心出品Word格式.docx》由会员分享,可在线阅读,更多相关《NRF24L01 MSP430发送接收程序word文档良心出品Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
这是NRF24L01的头文件配置程序:
#include<
msp430x14x.h>
//=======================NRF24L01_CE端口=========================================
#defineRF24L01_CE_0P3OUT&
=~BIT1
#defineRF24L01_CE_1P3OUT|=BIT1
//=============================RF24L01_CSN端口==================================
#defineRF24L01_CSN_0P3OUT&
=~BIT3
#defineRF24L01_CSN_1P3OUT|=BIT3
//=============================RF24L01_SCK端口======================================
#defineRF24L01_SCK_0P3OUT&
=~BIT2
#defineRF24L01_SCK_1P3OUT|=BIT2
//=============================RF24L01_MISO端口=========================================
#defineRF24L01_MISO_0P3OUT&
=~BIT0
#defineRF24L01_MISO_1P3OUT|=BIT0
//=============================RF24L01_MOSI端口================================
#defineRF24L01_MOSI_0P2OUT&
=~BIT6
#defineRF24L01_MOSI_1P2OUT|=BIT6
//==========================IRQ状态============================================
#defineRF24L01_IRQ_0P2OUT&
=~BIT7
#defineRF24L01_IRQ_1P2OUT|=BIT7
//==========================NRF24L01地址,接收发送数据长度============================================
#defineTX_ADR_WIDTH5//5uintsTXaddresswidth
#defineRX_ADR_WIDTH5//5uintsRXaddresswidth
#defineTX_PLOAD_WIDTH32//32TXpayload//这里可以更改你想要发送和接收的数据长度如果是发指令我喜欢越短越好
#defineRX_PLOAD_WIDTH32//32uintsTXpayload
//=========================NRF24L01寄存器指令===================================
#defineREAD_REG0x00//读寄存器指令
#defineWRITE_REG0x20//写寄存器指令
#defineRD_RX_PLOAD0x61//读取接收数据指令
#defineWR_TX_PLOAD0xA0//写待发数据指令
#defineFLUSH_TX0xE1//冲洗发送FIFO指令
#defineFLUSH_RX0xE2//冲洗接收FIFO指令
#defineREUSE_TX_PL0xE3//定义重复装载数据指令
#defineNOP10xFF//保留
//========================SPI(nRF24L01)寄存器地址===============================
#defineCONFIG0x00//配置收发状态,CRC校验模式以及收发状态响应方式
#defineEN_AA0x01//自动应答功能设置
#defineEN_RXADDR0x02//可用信道设置
#defineSETUP_AW0x03//收发地址宽度设置
#defineSETUP_RETR0x04//自动重发功能设置
#defineRF_CH0x05//工作频率设置
#defineRF_SETUP0x06//发射速率、功耗功能设置
#defineSTATUS0x07//状态寄存器
#defineOBSERVE_TX0x08//发送监测功能
#defineCD0x09//地址检测
#defineRX_ADDR_P00x0A//频道0接收数据地址
#defineRX_ADDR_P10x0B//频道1接收数据地址
#defineRX_ADDR_P20x0C//频道2接收数据地址
#defineRX_ADDR_P30x0D//频道3接收数据地址
#defineRX_ADDR_P40x0E//频道4接收数据地址
#defineRX_ADDR_P50x0F//频道5接收数据地址
#defineTX_ADDR0x10//发送地址寄存器
#defineRX_PW_P00x11//接收频道0接收数据长度
#defineRX_PW_P10x12//接收频道0接收数据长度
#defineRX_PW_P20x13//接收频道0接收数据长度
#defineRX_PW_P30x14//接收频道0接收数据长度
#defineRX_PW_P40x15//接收频道0接收数据长度
#defineRX_PW_P50x16//接收频道0接收数据长度
#defineFIFO_STATUS0x17//FIFO栈入栈出状态寄存器设置
//=============================RF24l01状态=====================================
charTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};
//本地地址
//我刚开始学的时候对这个发送和接收地址不是很明白,为什么他要设置成这样,后来才知道这个地址是用户自己定的,也就是说不是每个芯片只有唯一的地址,只要发送和接收端的地址一致就行
charRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};
//接收地址
charsta;
charTxBuf[32]=
{
0x01,0x02,0x03,0x4,0x05,0x06,0x07,0x08,
0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16,
0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,
0x25,0x26,0x27,0x28,0x29,0x30,0x31,0x32,
};
//这个程序要发送的数据
voidRF24L01_IO_set(void);
voidms_delay(void);
voidInitSys();
voidDelay(ints);
charSPI_RW(chardata);
charSPI_Read(charreg);
charSPI_RW_Reg(charreg,charvalue);
charSPI_Read_Buf(charreg,char*pBuf,charuchars);
charSPI_Write_Buf(charreg,char*pBuf,charuchars);
voidSetRX_Mode(void);
charnRF24L01_RxPacket(char*rx_buf);
voidnRF24L01_TxPacket(char*tx_buf);
voidinit_NRF24L01(void);
//===========================RF24L01端口设置==========================================
voidRF24L01_IO_set(void)
P2DIR&
=0x7f;
P2DIR|=0x40;
P2SEL&
=0x3F;
P2IE=P2IE&
0x3f;
P3DIR&
=0xFE;
P3DIR|=0x0E;
P3SEL&
=0xF0;
}
//******************************************************************************
//系统初始化打开430XT2晶振
voidInitSys()
unsignedintiq0;
_DINT();
BCSCTL1&
=~XT2OFF;
do
IFG1&
=~OFIFG;
//清除振荡器失效标志
for(iq0=0xFF;
iq0>
0;
iq0--);
//延时,等待XT2起振
while((IFG1&
OFIFG)!
=0);
//判断XT2是否起振
BCSCTL2=SELM1+SELS;
//MCLK,SMCLK时钟为XT2
//========================延时约5ms=============================================
voidms_delay(void)
{
unsignedinti=40000;
while(i!
=0)
i--;
//========================================长延时================================
voidDelay(ints)
unsignedinti,j;
for(i=0;
i<
s;
i++);
for(j=0;
j<
j++);
//*******************