完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
想用两个51单片机和NRF24L01模块实现无线通信,两个单片机一个做主机一个做从机,每个上面都连接无线模块。当按下主机上某按键时,会将对应的数据发送出去,比如按下主机键1则主机发送数据1,按下主机键2则主机发送数据2,从机一直处于接收模式,但是现在的实验现象却一直有问题,从机始终只能接收到第一次按键按下所发送的数据,以后再按按键,从机就收不到主机发来的数据,比如先按键1再按键2,从机就只能收到数据1,以后再按键从机也收不到任何数据;先按键2再按键1,从机就只能收到数据2,以后再按键从机也收不到任何数据。不知道是哪里出了问题。
主机程序 #include "NRF24L01.H" ***it key1 = P3^0; ***it key2 = P3^1; ***it LED1=P1^0; ***it LED2=P1^1; uchar keyscan() //按键函数 { uchar temp; if(key1==0) { delay_ms(10); if(key1==0) { temp=1; } } if(key2==0) { delay_ms(10); if(key2==0) { temp=2; } } return temp; } void main() { uint flag=1,key; CE = 0; SCK = 0; CSN = 1; Serial_Init(); //初始化串口 while(1) //循环检测按键 并将对应数据发送出去 { while(flag) { key=keyscan(); //检测按键,有按键按下则退出内循环执行后面的语句 if((key==1)|(key==2)) flag=0; } TX_Mode(); //发送模式,将数据发送出去 Delay(100); if(key==1) { LED1=0; Transmit(Tx_Buf1); //Tx_Buf1=0x01 Serial_SendString(Tx_Buf1); } if(key==2) { LED2=0; Transmit(Tx_Buf2); //Tx_Buf2=0x02 Serial_SendString(Tx_Buf2); } while(CheckACK()); Delay(100); LED1=1; LED2=1; flag=1; //flag置1,则可执行下一次按键检测操作 } } 从机程序 #include "NRF24L01.H" ***it LED=P1^0; void main() { CE = 0; SCK = 0; CSN = 1; Serial_Init(); //初始化串口 while( 1 ) { RX_Mode(); //设置为接收模式,循环接收 Delay(100); //防止编译警告 if(nRF24L01_RxPacket(Rx_Buf1)) 如果接收到数据 { LED=1; Serial_SendString(Rx_Buf1); //就将数据显示在电脑上 } else LED=0; } } |
|
相关推荐
6个回答
|
|
正准备搞,发的程序不全吧
|
|
|
|
有沒有清除接收存儲器? 好像是叫接收存儲器吧,也可能叫數據緩存區
|
|
|
|
我有源码。加q807367157索取
|
|
|
|
了解了,谢谢楼主
|
|
|
|
了解了,谢谢楼主
|
|
|
|
了解了,谢谢楼主
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-24 06:16 , Processed in 0.575349 second(s), Total 54, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191