完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1 发送程序
#include #define uint unsigned int #define uchar unsigned char ***it TXEN = P1^0; //配置口定义5`6`7// ***it TRX_CE = P1^1; ***it PWR = P1^2; ***it MISO = P2^0; //SPI口定义0`1`2`3// ***it MOSI = P2^1; ***it SCK = P2^2; ***it CSN = P2^3; ***it DR = P1^5; //状态输出口4// /************//*RF寄存器配置*//************* // 0x00, //配置命令// // 0x6C, //CH_NO,配置频段在433.2MHZ // 0x0E, //输出功率为10db,不重发,节电为正常模式 // 0x44, //地址宽度设置,为4字节 // 0x03,0x03, //接收发送有效数据长度为3字节 // 0xE7,0xE7,0xE7,0xE7,//接收地址,16位CRC校验,外部时钟信号使能,16M晶振//UP_CLK输出1MHZ频率 // 0xDE, //CRC充许 //******************************/ /*uchar code RFConf[11]={0x00,0x6c,0x0e,0x44,0x03,0x03, 0xe7,0xe7,0xe7,0xe7,0xde}; */ uchar RFConf[11]= { 0x00, //配置命令// 0x4c, //CH_NO,配置频段在423MHZ 0x0C, //输出功率为10db,不重发,节电为正常模式 0x44, //地址宽度设置,为4字节 0x02,0x02, //接收发送有效数据长度为32字节 0xCC,0xCC,0xCC,0xCC, //接收地址 0x58, //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振 }; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void SpiWrite(uchar date) //用SPI口写数据至NRF905内// { uchar i; for(i=0;i<8;i++) { delay(1); SCK=0; MOSI=(date&0x80); date<<=1 ; delay(1); SCK=1; delay(1); SCK=0; } SCK=0; } void TxPacket(void) { TXEN=1; CSN=0; SpiWrite(0x22); //写发送地址,后面跟4字节地址// SpiWrite(0xcc); SpiWrite(0xcc); SpiWrite(0xcc); SpiWrite(0xcc); CSN=1; delay(1); CSN=0; SpiWrite(0x20); //写发送数据命令,后面跟三字节数据// SpiWrite(0x00); SpiWrite(0xff); SpiWrite(0xfe); CSN=1; delay(1); TRX_CE=1; TXEN=1; //CE,EN同时为1,为发送模式 delay(1); //等带发送完成// // while(!DR); //在非屏蔽状态下,只能发射一次 TRX_CE=0; //led=~led; //加上led后,对接收产生了一定的影响, //while(!DR); //有时多接收一次的数据 } void Ini_System(void) { //初始化配置寄存器// uchar i; delay(1); CSN=1; SCK=0; DR=0; PWR=1; //进入掉电模式 TRX_CE=0; TXEN=0; delay(1); CSN=0; //进入SIP模式 for(i=0;i<11;i++) { SpiWrite(RFConf[i]); //设置配置寄存器 } CSN=1; //关闭SPI,进入发射状态 PWR=1; } void main(void) { Ini_System(); //设置配置,并进入发射模式 //PWR=1; //进入掉电模式 while(1) { TxPacket(); //发送数据 DR=0; } } 2接收程序 #include #define uint unsigned int #define uchar unsigned char ***it TXEN = P1^0; //配置口定义7`6`5// ***it TRX_CE = P1^1; ***it PWR = P1^2; ***it MISO = P2^0; //SPI口定义0`1`2`3// ***it MOSI = P2^1; ***it SCK = P2^2; ***it CSN = P2^3; ***it DR = P1^5; //状态输出口4// ***it led0=P0^0; ***it led1=P0^1; /************//*RF寄存器配置*//************* // 0x00, //配置命令// // 0x6C, //CH_NO,配置频段在433.2MHZ // 0x0E, //输出功率为10db,不重发,节电为正常模式 // 0x44, //地址宽度设置,为4字节 // 0x03,0x03, //接收发送有效数据长度为3字节 // 0xE7,0xE7,0xE7,0xE7,//接收地址,16位CRC校验,外部时钟信号使能,16M晶振//UP_CLK输出1MHZ频率 // 0xDE, //CRC充许 //******************************/ /*uchar code RFConf[11]={0x00,0x6c,0x0e,0x44,0x03,0x03, 0xe7,0xe7,0xe7,0xe7,0xde}; */ uchar RFConf[11]={ //配置命令// 0x00,0x4c,0x0c,0x44,0x02,0x02, 0xcc,0xcc,0xcc,0xcc,0x58 //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振 }; uchar TxRxBuffer[2]; uchar date; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void SpiWrite(unsigned char date) //用SPI口写数据至NRF905内// { uchar i; for(i=0;i<8;i++) { delay(1); SCK=0; MOSI=(date&0x80); date<<=1 ; delay(1); SCK=1; delay(1); SCK=0; } SCK=0; } unsigned char SpiRead(void) //from 905 read data// { uchar i; for(i=0;i<8;i++) { date<<=1 ; SCK=0; delay(1); date|=MISO; SCK=1 ; delay(1); } SCK=0; return(date); } void RxPacket(void) //接收数据包// { uchar i; while(DR) for (i = 0 ;i < 2 ;i++) { //led=~led; TxRxBuffer[i] = SpiRead(); i++; } } void Wait_Rec_Packet(void) //等待接收数据包// { // uchar temp; PWR=1; TXEN=0; //接收模式 TRX_CE=1; delay(2); while(!DR) { delay(10); if(DR) //数据接收成功 { TRX_CE=0; //如果数据准备好,则进入待机模式,以便SPI口操作 CSN=0; delay(1); SpiWrite(0x24); //读nRF905所接受到的数据 RxPacket(); //保存数据 CSN=1; delay(10); TRX_CE=1; /*temp=TxRxBuffer[0]+TxRxBuffer[1]+TxRxBuffer[2]; if(temp==0x07) { lcdbit=!lcdbit; //lcdbit=0 }*/ break; } } } void Ini_System(void) //初始化配置寄存器// { uchar i; //lcdbit=1; CSN=1; SCK=0; DR=0; PWR=1; //进入掉电模式 TRX_CE=0; TXEN=0; delay(1); CSN=0; //进入SIP模式 for(i=0;i<11;i++) { SpiWrite(RFConf[i]); //设置配置寄存器 } CSN=1; //关闭SPI,进入接收状态 PWR=1; TRX_CE=1; TXEN=0; } void main(void) { Ini_System(); //设置配置,并进入接收模式 (收) //PWR=1; //进入掉电模式 led0=0; while(1) { Wait_Rec_Packet(); //等待接收完成,保存完接收数据(保存数据+地址) CSN=0; P0 = TxRxBuffer[0]; delay(600); P0 = TxRxBuffer[1]; delay(600); P0 = TxRxBuffer[2]; delay(600); CSN=1; } } 求各位大神帮忙看看,第一次使用无线模块,真心不太懂。。。。。 |
|
相关推荐
1个回答
|
|
如果使用者个无线模块与电脑连接,是要下个什么软件,或者该做些什么啊?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 19:09 , Processed in 0.617083 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号