利用SIM300模块和430单片机做的设备,用手机短信控制设备,执行一条删除一条,如果前面短信未删除,后面指令就无法执行,现在的问题是加了回复(执行一条指令返回一条确认消息)后就只能执行第一条,现在问题就是短信无法删除,我只改了总闸分的,其他没改,注
:未改动前短信是可以删除的
请问怎样才能使短信删除
下面是程序
void Action_judge(void)
{
ulong ultemp1=0,ultemp2; //号码认证
char i,temp1;//,temp2;
delay1S();
for(i=0;i<13;i++)
{
// test2=22;
receivnum=RX_action[i+2]-48;
}
for(i=0;i<11;i=i+2)
{
//test2=33;
temp1=receivnum;
receivnum=receivnum[i+1];
receivnum[i+1]=temp1;
}
//4294967296
//13277929732
receivnum1=10*receivnum[0]+receivnum[1];//13
ultemp2=receivnum[2];
ultemp1+=ultemp2*100000000;
ultemp2=receivnum[3];
ultemp1+=ultemp2*10000000;
ultemp2=receivnum[4];
ultemp1+=ultemp2*1000000;
ultemp2=receivnum[5];
ultemp1+=ultemp2*100000;
ultemp2=receivnum[6];
ultemp1+=ultemp2*10000;
ultemp2=receivnum[7];
ultemp1+=ultemp2*1000;
ultemp2=receivnum[8];
ultemp1+=ultemp2*100;
ultemp2=receivnum[9];
ultemp1+=ultemp2*10;
ultemp2=receivnum[10];
ultemp1+=ultemp2;
receivnum2=ultemp1;
for(i=0;(i<2*tablesize-1)&&pass==0;i=i+2)
{
if(receivnum1==Teletable&&receivnum2==Teletable[i+1])
{
pass=1;
// num6=i;
}
else
pass=0;
}
RX_bit=RX_temp;
flag_receiving=0;
counter_action=0;
if(pass)//如果通过认证
{
switch(RX_action[53])
{
case 65:
//设备自检
if(RX_action[45]==69)
{
flag_ensend=1;
flag_allsend=1;
}
flag_measuring=1;
flag_display=0;
break;
case 56:
//总闸合
//重合闸以后所有状态是否需要恢复到初始状态?
if(RX_action[45]==66)
{
P5OUT&=~BIT4;
flag_Tfault=0;
Tstep2send=0;
flag_Irmsfault=0;
rmstep2send=0;
flag_Iresfault=0;
restep2send=0;
flag_reclose=0;
flag_Iresfault=0;
flag_measuring=1;
flag_display=0;
flag_messfault=0;/*invalidate the message caused cut off flag*/
//清除过流标志
P4OUT&=~BIT0;
//清除过热标志
P4OUT&=~BIT1;
//清除剩余电流过大标志
P4OUT&=~BIT2;
}
break;
case 54:
//总闸分
if(RX_action[45]==66)
{
P5OUT|=BIT4;
delay1S();
delay1S();
delay1S();
diskeyint(); //禁止按键中断
flag_ensend=0;//flag clearence
flag_measuring=0;
flag_messfault=1;/*validate the flag to cutt off the break*/
send_commandall();
send_ATorder(TX_ATEsc);
send_ATorder(TX_ATD);//删除短信
}
enkeyint (); //发送完毕,打开按键中断
delay1S();
delay1S();
flag_measuring=1; //恢复测量状态
flag_display=0;//显示IRES
ATTReset();
delay1S();
ATT_Cali();
break;
case 49://支路1操作
//支路1合/分
if(RX_action[57]==56)
{
P3OUT&=~BIT0;
flag_messfault=0;
}
else if(RX_action[57]==54)
{
P3OUT|=BIT0;
flag_messfault=1;
}
flag_measuring=1;
flag_display=0;
break;
case 50:
//支路2合/分
if(RX_action[57]==56)
{
P3OUT&=~BIT1;
flag_messfault=0;
}
else if(RX_action[57]==54)
{
P3OUT|=BIT1;
flag_messfault=1;
}
flag_measuring=1;
flag_display=0;
break;
case 51:
//支路3合/分
if(RX_action[57]==56)
{
P3OUT&=~BIT2;
flag_messfault=0;
}
else if(RX_action[57]==54)
{
P3OUT|=BIT2;
flag_messfault=1;
}
flag_measuring=1;
flag_display=0;
break;
default:
flag_measuring=1;
flag_display=0;
break;
}
// enRXint();
send_ATorder(TX_ATD);//3//删除短信
// P4OUT&=~BIT1;
//P4OUT&=~BIT2;
enkeyint();
flag_measuring=1;//3//恢复测量状态
flag_display=0;
pass=0;///
}
else
{
send_ATorder(TX_ATD);
// P4OUT&=~BIT1;
//P4OUT&=~BIT2;
enkeyint();
flag_measuring=1;
flag_display=0;
}
}