|
为什么 单片机收到小灵通或10086这类的 短信死机
[复制链接]
单片机选用的 MSP430,利用SIM300模块实现短信控制功能,手机收发短信一切功能正常,但奇怪的 是单片机收到小灵通或10086这类的短信就会死机,因为里面设计的就是手机与手机发短信,但 死机确实是 个大隐患,下面是 我 的 串口中断函数
while((IFG1&UTXIFG0)==0);
*RX_bit=RXBUF0;
if(flag_sending)
{
flag_sending1=1;
flag_sending2=1;
}
//是否有新消息到达0D91(48 68 57 49) ,决定合适开始截取消息内容,现在截取的是0D91后面的部分86 13098870434F+其它
else if(flag_newmess)
{
flag_measuring=0;
if(*RX_bit==48)
{
flag_receiving1=1;
}
else
{
if(*RX_bit==68&&flag_receiving1==1)
flag_receiving2=1;
else if(*RX_bit==57&&flag_receiving1==1&&flag_receiving2==1)
flag_receiving3=1;
else if(*RX_bit==49&&flag_receiving1==1&&flag_receiving2==1&&flag_receiving3==1)
{
RX_bit=RX_action-1;//截取0D91后面的 内容存入RX_action[]
flag_receiving=1;
flag_newmess=0;
}
else
{
flag_receiving1=0;
flag_receiving2=0;
flag_receiving3=0;
}
}
}
else if(flag_receiving)
{
diskeyint();
counter_action++;
if(counter_action>60)
{
Action_judge();
enkeyint();
}
else
{
flag_measuring=1;
flag_display=0;
}
}
else
{
if(*RX_bit==77)
{
if(flag_newmess1&&flag_newmess2)
{
Action_newmess();
}
}
else if(*RX_bit==83)
{
if(flag_newmess1)
flag_newmess2=1;
}
else if(*RX_bit==34)
flag_newmess1=1;
else
{
flag_newmess1=0;
flag_newmess1=0;
}
}
RX_bit++;
现在发现问题也许出现在0D91这个地方,因为小灵通的 短信这里不是0D91而是0D81
小灵通格式的短信分析,以下是小灵通短信的格式例子:
08 91 683108301705F0 24 0F A1 01067361083658F9 00 08 60106051158423 08 77ED4FE16D4B8BD5
手机
08 91 683108200505F0 84 0D 91 683172979237F2 00 08 70102180635480 0C 547D4EE48BBE590781EA68C0
08表示随后的服务中心的号码是8位(两个字符表示1位),91表示是国际编码标准(81为国内),683108301705F0为服务中心的号码,利用两位倒置法为:8613800371500, 字符F是为了保存号码是偶数个而增加的多余字符,转换后去掉。
24表示SMS_DELIVER的第一个8位。
0F表示发送者的手机号的长度(0F为15位)。
A1表示发送号码的地址类型。
01067361083658F9共计16位为发送者的手机号,因为发送者的手机号长度为15所以补F。转换后要去掉,利用二位倒置法转换后为106037168063859。
00表示TP-PID.协议标识 。
08表示TP-DCS 编码方式。该处为8位bit方式。
60106051158423表示时间戳,转换后为:06年01月06日15时51分48秒,23为时区。
08表示用户发送短信内容的长度。
77ED4FE16D4B8BD5表示短信内容,采用两个字符表示一个单位。
请 高人指点一下,死机的原因大概在哪里?程序上有时没好的改进方法没有,谢谢大家了!
|
|