如何判断串口发送给单片机的数据是相同的呢?

kellycan   2008-11-21 09:25 楼主
问一个问题
假如我在串口调试助手上发送数据:pass word
如果单片机收到这组数据后,进入一个条件,
这里怎么样判断单片机收到这个数据呢?
怎么比较出发出来的数据就是pass word呢?
是不是要"p","a","s","s","w","o","r","d"每个字符判断相等呢?

串口发送:how are you?
单片机收到:how are you?
马上返回一句话给串口:fine,thank!

现在就是不知道怎么样写这程序,我的理解how are you?这些都是ascii码,是不是每个字母都判断一样才行呢

我用中断接收的,是不是一个字节中断一次的?

回复评论 (7)

如果采用ASCII码发送,单片机可以把接收到的字符放入缓冲区,以回车结束,直接判断整个字符串就行.
点赞  2008-11-21 09:30

上位机和下位机通讯时需要 握手协议

上位机和下位机通讯时需要 握手协议,简单的例子,比如说每次通讯有固定的起始位+固定的长度,单片机收到数据后进行判断处理
点赞  2008-11-21 09:32
有没例子啊,不太懂啊
点赞  2008-11-21 09:55
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
int print_data;

clear_wdt();

if((uart_temp > 32)||(erase_flag == 1))
{
erase_flag = 0;
uart_temp = 0;
}
snd[uart_temp++] = RXBUF0;

while (!(IFG1 & UTXIFG0)); // USART0 TX buffer ready?
cmd_flag = 1;
}

void up_pro(void)
{
uint8 *temp0,*temp1,*temp2,*temp3,*temp4,i;

if(cmd_flag)
{
cmd_flag = 0;
temp0 =(uint8 *) "e";
temp1 = (uint8 *) "r";
temp2 = (uint8 *) "a";
temp3 = (uint8 *) "s";
temp4 = (uint8 *) "e";
if ((snd[0] == *temp0)&&(snd[1] == *temp1)&&(snd[2] == *temp2)&&(snd[3] == *temp3)&&(snd[4] == *temp4))
{
erase_flag = 1;
UART0_SendNoStr(14,(uint8*)"erase success!");
for(i = 0;i<33; i++)
{
snd[i] = 0;
}
}
else
{
UART0_SendNoStr(20,(uint8*)"error!,again please!");
for(i = 0;i<33; i++)
{
snd[i] = 0;
}
}
}
}

我的是这样判断的,不知有没得改进呢
点赞  2008-11-21 10:22

学习了

点赞  2022-6-24 10:54

这个先把接收的数据放到一个BUFF中,然后在对BUFF中的数据进行字符串比对就好了。

点赞  2022-6-30 08:24

把数据原封不动回传给发送方,进行异或处理,应该可以快速验证数据吧。

点赞  2022-8-24 10:09
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复