上位机向下位机发送1234字符指令,单片机收到1234啦,为啥不执行亮一号LED灯,而是继续亮着二号LED灯。我初学单片机,不清楚上位机发给下位机的1234字符指令,下位机接收到指令后在主程序中进行字符比较时,只当成字符1,而不是当成字符1234.,想请大神指点指点。
下面是下位机串口主程序,可以正常运行,只是没执行相应动作。
#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "usart.h"
#include <string.h>
char *ra;
char r; //申请串口接收变量
void USART1_IRQHandler(void)//串口中断函数
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
//判断中断标志
{
r =USART_ReceiveData(USART1);//(USART1->DR);
USART_SendData(USART1,r);//返回数据给上位机
while(USART_GetFlagStatus(USART1,USART_FLAG_TC) != SET);
}
USART_ClearFlag(USART1,USART_FLAG_TC);
}
int main() //主函数
{
u8 i;
SysTick_Init(168);
LED_Init(); //LED初始化
USART1_Init(9600); //调用串口初始化函数
*ra = r;
char *s2 = "1234"; //设置1234选项字符
//调用字符比较函数
if(strcmp(ra,s2) == 0 ) //选一号LED灯亮1234
{
while(1)
{
i++;
if(i%20==0)
{
led1=!led1; //一号LED灯。 下句写个退出循环试试。
}
delay_ms(10);
}
}
else { //或者选二号LED灯
while(1)
{
i++;
if(i%20==0)
{
led2=!led2; //亮二号LED灯。下句写个退出循环试试。
}
delay_ms(10);
}
}
}
//结束
下面是下位机串口主程序,可以正常运行,只是没执行相应动作。
#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "usart.h"
#include <string.h>
char *ra;
char r; //申请串口接收变量
void USART1_IRQHandler(void)//串口中断函数
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
//判断中断标志
{
r =USART_ReceiveData(USART1);//(USART1->DR);
USART_SendData(USART1,r);//返回数据给上位机
while(USART_GetFlagStatus(USART1,USART_FLAG_TC) != SET);
}
USART_ClearFlag(USART1,USART_FLAG_TC);
}
int main() //主函数
{
u8 i;
SysTick_Init(168);
LED_Init(); //LED初始化
USART1_Init(9600); //调用串口初始化函数
*ra = r;
char *s2 = "1234"; //设置1234选项字符
//调用字符比较函数
if(strcmp(ra,s2) == 0 ) //选一号LED灯亮1234
{
while(1)
{
i++;
if(i%20==0)
{
led1=!led1; //一号LED灯。 下句写个退出循环试试。
}
delay_ms(10);
}
}
else { //或者选二号LED灯
while(1)
{
i++;
if(i%20==0)
{
led2=!led2; //亮二号LED灯。下句写个退出循环试试。
}
delay_ms(10);
}
}
}
//结束