您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > MSP430G2553(51单片机)-NRF24L01无线模块接收程序
main-Printedon2015/2/1015:37:28Page1//***************************************************************************************************//功能描述:以MSP430G2553为主控芯片(也可用于51单片机,只需改变IO口定义和自己设定延时程序),//通过NRF24L01无线模块接收发送端的数据。此程序仅作为一个测试程序,可以通过一个led(P2.2)灯观察//是否通信成功,当接收到的数据是0时led灯灭,当接收到的数据是1时led等灭//如需发送程序请搜索:MSP430G2553_NRF24L01无线模块发送程序//DZX//February2015//BuiltwithIAREmbeddedWorkbenchVersion:5.50//***************************************************************************************************#includemsp430g2553.h#defineucharunsignedchar#defineuintunsignedint#defineCPU_F((double)1000000)#definedelayus(x)__delay_cycles((long)(CPU_F*(double)x/1000000.0))#definedelayms(x)__delay_cycles((long)(CPU_F*(double)x/1000.0))//****************************************NRF24L01IO端口定义**************************************//#defineCE_0P1OUT&=~BIT0#defineCE_1P1OUT|=BIT0#defineCSN_0P1OUT&=~BIT3#defineCSN_1P1OUT|=BIT3#defineSCK_0P1OUT&=~BIT4#defineSCK_1P1OUT|=BIT4#defineMOSI_0P1OUT&=~BIT5#defineMOSI_1P1OUT|=BIT5#defineMISOP1IN&BIT6#defineIRQP1IN&BIT7//****************************************test_LEDIO端口定义**************************************//#defineLED_0P2OUT&=~BIT2;#defineLED_1P2OUT|=BIT2;//*****************************NRF24L01的接收和发送地址********************************************//#defineTX_ADR_WIDTH5//5个字节的TX地址长度#defineRX_ADR_WIDTH5//5个字节的RX地址长度#defineTX_PLOAD_WIDTH16//16个字节的TX数据长度#defineRX_PLOAD_WIDTH16//16个字节的RX数据长度ucharsta;//状态标志ucharRxBuf[16];//接收缓存ucharTxBuf[16];//发送缓存ucharTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//本地地址ucharRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//接收地址//***************************************NRF24L01寄存器指令****************************************//#defineREAD_REG0x00//读寄存器#defineWRITE_REG0x20//写寄存器#defineRD_RX_PLOAD0x61//读取接收数据#defineWR_TX_PLOAD0xA0//写待发数据#defineFLUSH_TX0xE1//冲洗发送FIFO#defineFLUSH_RX0xE2//冲洗接收FIFO#defineREUSE_TX_PL0xE3//定义重复装载数据#defineNOP0xFF//保留//*************************************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接收数据长度main-Printedon2015/2/1015:37:28Page2#defineRX_PW_P10x12//接收频道0接收数据长度#defineRX_PW_P20x13//接收频道0接收数据长度#defineRX_PW_P30x14//接收频道0接收数据长度#defineRX_PW_P40x15//接收频道0接收数据长度#defineRX_PW_P50x16//接收频道0接收数据长度#defineFIFO_STATUS0x17//FIFO栈入栈出状态寄存器设置voidinit_IO_MSP430();voidinit_NRF24L01();ucharSPI_RW(uchardata);ucharSPI_Read(ucharreg);ucharSPI_RW_Reg(ucharreg,ucharvalue);ucharSPI_Read_Buf(ucharreg,uchar*pBuf,ucharuchars);ucharSPI_Write_Buf(ucharreg,uchar*pBuf,ucharuchars);voidSetRX_Mode();voidSetTx_Mode();voidNRF_RxPacket(uchar*rx_buf);voidNRF_TxPacket(uchar*tx_buf);/*****************************************************************************************************函数:init_IO_MSP430()*描述:NRF24L01初始化*参数:无*返回:无****************************************************************************************************/voidinit_IO_MSP430(){P1DIR|=BIT0+BIT3+BIT4+BIT5;P1DIR&=~BIT6;P1DIR&=~BIT7;P2DIR|=BIT2;P2OUT&=~BIT2;}/*****************************************************************************************************函数:voidinit_NRF24L01()*描述:NRF24L01初始化*参数:无*返回:无****************************************************************************************************/voidinit_NRF24L01(){delayus(100);CE_0;//片选使能CSN_1;//SPI使能SCK_0;//SPI时钟拉低SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//写本地地址SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//写接收端地址SPI_RW_Reg(WRITE_REG+EN_AA,0x01);//通道0自动应答SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);//允许接收地址频道0//SPI_RW_Reg(WRITE_REG+SETUP_AW,0x02);//Setupaddresswidth=5bytesSPI_RW_Reg(WRITE_REG+SETUP_RETR,0x1a);//设置自动重发时间和次数:500us+86us,10retrans...SPI_RW_Reg(WRITE_REG+RF_CH,0x32);//设置信道工作频率,收发必须一致SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//设置接收数据长度SPI_RW_Reg(WRITE_REG+RF_SETUP,0x0f);//设置发射速率为2MHZ,发射功率为最大值0dBSPI_RW_Reg(WRITE_REG+CONFIG,0x7c);//IRQ引脚不显示中断掉电模式1~16CRC校验}/*****************************************************************************************************函数:ucharSPI_RW(uchardata)*描述:SPI读/写一个字节数据*参数:要写入的数据(uchar)*返回:读取到的数据(uchar)****************************************************************************************************/ucharSPI_RW(uchardata){chari,temp=0;for(i=0;i8;i++)//output8-bit{if((data&0x80)==0x80)MOSI_1;//output'uchar',MSBtoMOSIelseMOSI_0;main-Printedon2015/2/1015:37:29Page3data=(data1);//shiftnextbitintoMSB..temp=1;SCK_1;//SetSCKhigh..if(MISO)temp++;//capturecurrentMISObitSCK_0;//..thensetSCKlowagain}return(temp);//returnreaduchar}/**************************
本文标题:MSP430G2553(51单片机)-NRF24L01无线模块接收程序
链接地址:https://www.777doc.com/doc-8061845 .html