下面为MINI版发送数据
Control_Point1_Open[16]给单片机,单片机接收数据并自动回复给mini板的代码。MINI版的程序不变。
问题是:
1、MINI板第一次发送数据给单片机的时候,单片机接收到的数据是 Control_Point1_Open[16]的数据,但是后面还多接收12个0X00。这是为什么?
2、当单片机接收到MINI板的数据后,自动回复给MINI板,MINI板接收到的数据为12个0x00加
Control_Point1_Open[16]的数据。除第一次外再接收数据就
少了0XAA,后面的数据就,只有
0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0xBB。这是为什么呢。
void main()
{
uchar Control_Point1_Open[16]={0xAA,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA1,0x00,0xBB};
uchar Respond_Point1_Open[16]={0xAA,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0xBB};
uchar Rx_Buf[32]; //接收到的数据暂存器,最多32字节数据
uchar i;
uchar flag=0;
init_NRF24L01();
StartUART();
while(NRF24L01_Check()) //检查不到24l01则报警
{
LED0=0;
delayms(200);
LED0=1;
delayms(200);
}
while(1)
{
RX_Mode();//接收模式
while(!nRF24L01_RxPacket(Rx_Buf)) //等待接收数据 ,返回1则接收到数据 ,在等待接收数据期间,可以随时变成发送模式
{
if(flag==16) //按了按键8 则变成发送模式,发送对应数据,发送完后变成接收模式
{
TX_Mode(); //发送模式
nRF24L01_TxPacket(Respond_Point1_Open); // 发送命令数据
delay_ms(500);
SPI_WR_Reg(WRITE_REG+NRFRegSTATUS,0XFF);
flag=0;
break; //退出最近的循环,从而变回接收模式,这句关键
}
}
for(i=0;i<16;i++)
{
if(Rx_Buf
==Control_Point1_Open) //若接收到对应的数据则实现对应功能
{
flag++;
R_S_Byte(Rx_Buf); //为串口输出函数
Rx_Buf=0;//清空数据
}
}
}
}