两块CC2530学习板在IAR软件上利用ZigBee技术实现A板按键控制B板LED灯1秒周期闪烁,A板按键第二次按下时B板LED灯停止闪烁

问题:A板按键第一次按下时B板LED灯成功闪烁,但是A板按键按第二次时,B板的LED灯闪烁停不下来,初步判断是接收端的代码有问题,都是尝试了好几种方法,都没有解决,可以帮我看看嘛
发送端A板代码如下:

#include "hal_defs.h"
#include "hal_cc8051.h"
#include "hal_int.h"
#include "hal_mcu.h"
#include "hal_board.h"
#include "hal_led.h"
#include "hal_rf.h"
#include "basic_rf.h"
#include "hal_uart.h" 
#include "sensor_drv/sensor.h"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
/*****点对点通讯地址设置******/
#define RF_CHANNEL                21         // 频道 11~26
#define PAN_ID                    0x0700     //网络id 
#define MY_ADDR                   0x071A     //本机模块地址
#define SEND_ADDR                 0x071B     //发送地址
#define D3 P1_0
#define SW1 P1_2
/**************************************************/
unsigned int count=0;
unsigned char dat_send;
unsigned char dat_recv;
static basicRfCfg_t basicRfConfig;
// 无线RF初始化
void ConfigRf_Init(void)
{
    basicRfConfig.panId       =   PAN_ID;
    basicRfConfig.channel     =   RF_CHANNEL;
    basicRfConfig.myAddr      =   MY_ADDR;
    basicRfConfig.ackRequest  =   TRUE;
    while(basicRfInit(&basicRfConfig) == FAILED);
    basicRfReceiveOn();
}
void InitPort()
{
 P1SEL &=~0X01;
 P1DIR |=0X01;
 P1 = 0X00;
 P1SEL &=~0X04;
 P1DIR &=~0X04;
 P1INP &=~0X04;
 P2INP &=~0X40;
}
/*void delay(unsigned int t)
{
 unsigned int i;
 unsigned char j;
 for(i=0;i<t;i++)
 {
  for(j=0;j<240;j++)
  {
   asm("NOP"); 
   asm("NOP"); 
   asm("NOP");
  }
 }
} */
/*void LSD()
{
 D3=0;
 delay(1000);
 D3=1;
 delay(1000);
}*/
/********************MAIN************************/

void main(void)
{
    InitPort();
    halBoardInit();
    ConfigRf_Init();
    while(1)
    {
      if(SW1 == 0)
      {
       halMcuWaitUs(100);
       if(SW1 == 0)
       {
        while(SW1 == 0);
        count++;
        dat_send=count;
        basicRfSendPacket(SEND_ADDR, &dat_send, 1);
       }
      }
    }
}

接收端B板代码如下:


```c++
#include "hal_defs.h"
#include "hal_cc8051.h"
#include "hal_int.h"
#include "hal_mcu.h"
#include "hal_board.h"
#include "hal_led.h"
#include "hal_rf.h"
#include "basic_rf.h"
#include "hal_uart.h" 
#include "sensor_drv/sensor.h"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
/*****点对点通讯地址设置******/
#define RF_CHANNEL                21         // 频道 11~26
#define PAN_ID                    0x0700     //网络id 
#define MY_ADDR                   0x071B     //本机模块地址
#define SEND_ADDR                 0x071A     //发送地址
#define D3 P1_0
#define SW1 P1_2
unsigned int count=0;
unsigned char dat_send;
unsigned char dat_recv;
/**************************************************/
static basicRfCfg_t basicRfConfig;
// 无线RF初始化
void ConfigRf_Init(void)
{
    basicRfConfig.panId       =   PAN_ID;
    basicRfConfig.channel     =   RF_CHANNEL;
    basicRfConfig.myAddr      =   MY_ADDR;
    basicRfConfig.ackRequest  =   TRUE;
    while(basicRfInit(&basicRfConfig) == FAILED);
    basicRfReceiveOn();
}
void InitPort()
{
  P1SEL &=~0X01;
  P1DIR |=0X01;
  P1=0X00;
  P1SEL &=~0X04;
  P1DIR &=~0X04;
  P1INP &=~0X04;
  P2INP &=~0X40;
}
/*void delay(unsigned int t)
{
  unsigned int i;
  unsigned char j;
  for(i=0;i<t;i++)
  {
    for(j=0;j<240;j++)
    {
      asm("NOP");
      asm("NOP");
      asm("NOP");
    }
  }
}*/
void LSD()
{
  D3=1;
  halMcuWaitMs(500);
  D3=0;
  halMcuWaitMs(500);
}
/********************MAIN************************/
void main(void)
{
    halBoardInit();//
    ConfigRf_Init();//
    
    InitPort();
    while(1)
    {
    /* user code start */
     
      if(basicRfPacketIsReady())
      {
        basicRfReceive(&dat_recv,1,NULL);
        if(dat_recv%2!=0)
        { 
          while(1){
          LSD();
          if(dat_recv%2==0)
          { D3=0;
            break;}
          }         
        }
       // else if(dat_recv%2==0)
       // {
       //   D3=0;
       //   count=0;
       // }
      }
    /* user code end */
    }
}

```

B板接收第一个命令之后进入while(1){LSD();}进行闪烁,无法跳出循环接收第二个命令;