请教一下,想用51
单片机实现NRF24L01之间的无线
通信,主机上有按键按下时,将按键对应的数字发出去,从机收到数字判断是否和自身编号相同,若相同则对应从机将测量得到的某数据发送给主机,即实现主机到从机,从机到主机的无线通信。。。。。。该设想在最简单的无线通信程序中可以实现(即不加入其他测量数据的函数,仅仅是发送固定数据),但一旦加入测量数据的函数,从机发送给主机的数据信息主机就无法接收到,不知道是为什么,求教诸路大神指点一下。
主机主函数:
void main()
{
uint i = 0;
uint key;
CE = 0;
SCK = 0;
CSN = 1;
Serial_Init(); //初始化串口
while(1)
{
uint flag=1,flag1=1;
//先检测是否有按键按下,若有则发送该按键对应的数字给从机
while(flag)
{
key=keyscan();
if((key==1)|(key==2))
flag=0;
}
TX_Mode();
Delay(100);
if(key==1)
{
LED0=0;
Transmit(Tx_Buf1);
Serial_SendString(Tx_Buf1);
}
if(key==2)
{
LED1=0;
Transmit(Tx_Buf2);
Serial_SendString(Tx_Buf2);
}
while(CheckACK());
Delay(100);
//****************接收模式************//
RX_Mode();
Delay(100);//防止编译警告
while(flag1)
{
if(nRF24L01_RxPacket(Rx_Buf))
{
Serial_SendString(Rx_Buf);
flag1=0;
}
else
{
LED2=0;
con
tinue;
}
} } }
从机主函数:
void main( )
{
uchar status;
uchar flag=1;
uchar k;
//初始化NRF24L01
CE = 0;
SCK = 0;
CSN = 1;
Serial_Init(); //串口初始化
Init_ADXL345(); //初始化ADXL345
#if MODE
PcdReset();
PcdAntennaOff();
PcdAntennaOn();
#endif
while(flag) //若有卡刷卡则读出卡号并跳出循环,若无卡,则一直循环,后面的程序不执行
{
for(i=0;i<8;i++)
{
Tx_Buf
=1;
}
status = PcdRequest(PICC_REQALL, g_ucTempbuf);
if(status != MI_OK)
{
continue;
}
status = PcdAnticoll(g_ucTempbuf);
if(status != MI_OK)
{
continue;
}
//读出卡号,前4个字节
for(i=0;i<2;i++ )
{
CardNum = g_ucTempbuf;
Tx_Buf=g_ucTempbuf;
}
flag=0;
}
//LED=0;
while ( 1 )
{
//先处于接收模式,收到主机发出的按键操作对应的数对比之后再转化为发送模式,对比不相等则后续操作不执行
RX_Mode();
Delay(100);//防止编译警告
if(nRF24L01_RxPacket(Rx_Buf1))
{
if((Rx_Buf1[0]==0x01)|(Rx_Buf1[0]==0x02))
// if(Rx_Buf1[0]==0x02)
{
LED=0;
Serial_SendString(Rx_Buf1);
}
// else
// LED=0;
}
else
continue;
#if MODE
Multiple_Read_ADXL345(); //调用该函数,九轴读取姿态数据存放在BUF中
//LED=~LED;
Delay(100);
for(i=0;i<6;i++)
{
if(BUF==0)
{
BUF=1;
}
Tx_Buf[2+i] = BUF;
}
//发送 模式代码 让从机发送10000次,因为找不到退出循环的条件所以没有用while
TX_Mode();
Delay(100);
for(k=0;k<10000;k++)
{
Transmit(Tx_Buf);
Serial_SendString(Tx_Buf);
while(CheckACK());
//LED=0;
Delay(100);
LED=1;
}
#endif
}
}
一周热门 更多>