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++;
}
}
展开
 我来答
Nifflas
2012-05-07
知道答主
回答量:8
采纳率:0%
帮助的人:14.7万
展开全部
MCLK是专门用作单片机CPU和系统的,既然程序处理的慢罩陆岁,适当加快主时钟MCLK的频率,就可以加快程序处理时间,比如物睁说分频的时候你原来选择的是8倍分频,改成4倍试试,再不行就是2倍,悉锋这就肯定会行的,同时别忘了把某些地方用到的延时程序进行修改,要不然程序没变,实际的延时时间变短了。
lzback1
2012-05-06 · TA获得超过2951个赞
知道小有建树答主
回答量:496
采纳率:0%
帮助的人:687万
展开全部
每太搞明白你的意思,不过我想。
1.就算你用某种方式不出中断然后连续接收字散皮符串,那么在这个中断子程内你也一定搜梁需要往复判断下一个字节,这样时间还真不一定比一字节一中断快
2.我觉得在单片机程序里设置一个输入缓存数组的话没问题吧,你只需要检测冲漏差到停止位之后将从+CMD到停止位中间的数据统一处理就可以了啊,或者是我没搞明白你的意思。
欢迎追问~
追问
如果在中断里一直接数据应该怎么写?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式