msp430单片机UART接收字符串的问题
我现在需要通过串口接收无线模块发来的短信:字符串(很长),而且长短未知,还需要判断串口接收的是否为短信(指令:+CMT)因为可能会有其他指令的干扰所以必须判断,如果进一次...
我现在需要通过串口接收无线模块发来的短信:字符串(很长),而且长短未知,还需要判断串口接收的是否为短信(指令:+CMT)因为可能会有其他指令的干扰所以必须判断,如果进一次中断接收一个字节然后同时判断的话,就没有对数据的判断时间了,如果要是先接收再判断呢又不知道什么时候短信结束(因为会有其它的数据),现在我想的解决方案是:能不能在串口中断程序中连续接收字符串,不出中断,这样是不是会节省时间?或者有其他的什么方法能解决的,请说一说,不胜感激!!!!
短息的格式:
+CMT: "86号码",,"12/04/24,14:44:11+32",145,4,0,0,"8612700100600",145,2
gg
其中gg是我需要的数据。在gg之前有个回车0D 0A在gg后面也有个0D0A这个可以作为判断短信结束的标志,但是由于处理时间必须短,中断程序一点都不能长。
+CMT: "号码",,"12/04/24,14:44:11+32",145,4,0,0,"8612700100600",145,20D0Agg0D0A,这是短信格式,两个0D0A之间的gg代表我想要的数据,整个数据是没有停止位的,只有起始位+CMT,通过判断0D0A来看是不是停止了,但是其他没用的数据也会有这两个0D0A,或者说有什么办法能判断?中断程序:
//UART1接收中断服务程序,这是判断起始位+CMT的程序,但是不能用,因为太长了,时间不够。
#pragma vector = USCIAB1RX_VECTOR
__interrupt void UART1_RX_ISR(void)
{
if(message_num0 == 0)//+
{
if(message_temp_data == 0x2B)
{
message_num0++;
}
}
else if(message_num0 == 1)//C
{
if(message_temp_data == 0x43)
{
message_num0++;
}
else
{
message_num0 = 0;
}
}
else if(message_num0 == 2)//M
{
if(message_temp_data == 0x4D)
{
message_num0++;
}
else
{
message_num0=0;
}
}
else if(message_num0 == 3)//T
{
if(message_temp_data == 0x54)
{
message_num0++;
}
else
{
message_num0=0;
}
}
else if(message_num0 == 4)
{
if(message_temp_data ==0x0A)
{
message_num0++;
}
}
} 展开
短息的格式:
+CMT: "86号码",,"12/04/24,14:44:11+32",145,4,0,0,"8612700100600",145,2
gg
其中gg是我需要的数据。在gg之前有个回车0D 0A在gg后面也有个0D0A这个可以作为判断短信结束的标志,但是由于处理时间必须短,中断程序一点都不能长。
+CMT: "号码",,"12/04/24,14:44:11+32",145,4,0,0,"8612700100600",145,20D0Agg0D0A,这是短信格式,两个0D0A之间的gg代表我想要的数据,整个数据是没有停止位的,只有起始位+CMT,通过判断0D0A来看是不是停止了,但是其他没用的数据也会有这两个0D0A,或者说有什么办法能判断?中断程序:
//UART1接收中断服务程序,这是判断起始位+CMT的程序,但是不能用,因为太长了,时间不够。
#pragma vector = USCIAB1RX_VECTOR
__interrupt void UART1_RX_ISR(void)
{
if(message_num0 == 0)//+
{
if(message_temp_data == 0x2B)
{
message_num0++;
}
}
else if(message_num0 == 1)//C
{
if(message_temp_data == 0x43)
{
message_num0++;
}
else
{
message_num0 = 0;
}
}
else if(message_num0 == 2)//M
{
if(message_temp_data == 0x4D)
{
message_num0++;
}
else
{
message_num0=0;
}
}
else if(message_num0 == 3)//T
{
if(message_temp_data == 0x54)
{
message_num0++;
}
else
{
message_num0=0;
}
}
else if(message_num0 == 4)
{
if(message_temp_data ==0x0A)
{
message_num0++;
}
}
} 展开
2个回答
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询