问一个问题
假如我在串口调试助手上发送数据:pass word
如果单片机收到这组数据后,进入一个条件,
这里怎么样判断单片机收到这个数据呢?
怎么比较出发出来的数据就是pass word呢?
是不是要"p","a","s","s","w","o","r","d"每个字符判断相等呢?
串口发送:how are you?
单片机收到:how are you?
马上返回一句话给串口:fine,thank!
现在就是不知道怎么样写这程序,我的理解how are you?这些都是ascii码,是不是每个字母都判断一样才行呢
我用中断接收的,是不是一个字节中断一次的?
如果采用ASCII码发送,单片机可以把接收到的字符放入缓冲区,以回车结束,直接判断整个字符串就行.
上位机和下位机通讯时需要 握手协议
上位机和下位机通讯时需要 握手协议,简单的例子,比如说每次通讯有固定的起始位+固定的长度,单片机收到数据后进行判断处理
#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;
}
}
}
}
我的是这样判断的,不知有没得改进呢
这个先把接收的数据放到一个BUFF中,然后在对BUFF中的数据进行字符串比对就好了。
把数据原封不动回传给发送方,进行异或处理,应该可以快速验证数据吧。