问题: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();}进行闪烁,无法跳出循环接收第二个命令;