📄 duan1224.c
字号:
Rec_cont=0;
Rec_stats=0;
Send_stats=0;
Send_cont=0;
Send_longth=0;
Comm_send_errio=0;
Start_rec=0;
Comm_errio=0;
Sending=0;
Comm_send_times=0;
}
break;
}
default:
{
Rec_cont=0;
Rec_stats=0;
Comm_send_errio=0;
Start_rec=0;
Comm_errio=0;
Sending=0;
}
}
}
else
{
Rec_buff1[Rec_cont]=SBUF;
Rec_cont++;
Start_rec=1;
if(Rec_cont>=Send_longth)
{
Command=0;
Rec_cont=0;
Rec_stats=0;
}
}
}
else
{ //发送中断//
TI=0;
if(Send_cont<Send_longth) //如果没有发送完继续发送数据//
{
SBUF=Send_buff1[Send_cont];
Send_cont++;
}
else
{
Send_cont=0;
//Sending=0;
//Comm_send_times=0;
}
}
}
/////////////////////////////////////////////////
void main()
{
uchar j=0,i=0;
uchar k=0;
EA=0;
P0=0XFF;
P2=0XFF;
P1=0XFF;
P3=0XFF;
IE=0x12;
IP=0x10; //Serial Port is high level.
TMOD=0x21;
TH1=0xfa; //晶振用11.0592M,serial is 9600bps;//
TL1=0xfa;
TH0=0x3C; //T0 50ms;//
TL0=0xAF;
PCON=0x80;
TCON=0x50;
SCON=0x50;
//////////////////////////////////////
//////////////////////////////////////////////
for(j=0;j<11;j++)
{
TEL_num[j]=I2C_ReadData(j); //从AT24C02中读取号码,地址是0--10,11位电话号码//
}
/////////////////////////////////////////////
if(errio)
{
for(j=0;j<11;j++)
{
TEL_num[j]=TEL_num_back[j]; //如果读取AT24V02失败,使用备用电话号码//
}
}
// delay(500); //延时一段时间等待GSM模块找到信号//
TR0=1;
IE=0X82;
/////////////////////////////////////////和GSM模块握手,如果没有回应或回应错误,继续发送握手信号;
AT_COM_STEP=0;
i=1;
while(i==1)
{
WDOG=~WDOG;
switch (AT_COM_STEP)
{
case 0: //发送AT握手指令//
{
Rec_cont=0;
Start_rec=0;
Comm_errio=0;
TI=1;
j=0;
while(j<3)
{
if(TI==1)
{
TI=0;
SBUF=AT[j];
j++;
}
}
while(TI==0);
TI=0;
AT_COM_STEP=1;
Start_rec=1;
break;
}
case 1:
{
if(RI==1)
{
RI=0;
Rec_buff1[Rec_cont]=SBUF;
Rec_cont++;
if(Rec_cont>=9) //判断返回OK//
{
if(Rec_buff1[5]==0x4f&&Rec_buff1[6]==0x4b&&Rec_buff1[7]==0x0d&&Rec_buff1[8]==0x0a) //返回OK,表示发送命令成功//
{
AT_COM_STEP=2;
Start_rec=0;
Comm_errio=0;
}
}
}
if(Comm_errio>=50) //超过2.5秒没有返回OK,返回上一步从法AT//
{
AT_COM_STEP=0;
Start_rec=0;
Comm_errio=0;
}
break;
}
case 2: //发送模块收到短信后的提示方法//
{
Comm_errio=0;
Rec_cont=0;
TI=1;
j=0;
while(j<12)
{
if(TI==1)
{
TI=0;
SBUF=AT_CNMI[j];
j++;
}
}
while(TI==0);
TI=0;
AT_COM_STEP=3;
Start_rec=1;
break;
}
case 3:
{
if(RI==1)
{
RI=0;
Rec_buff1[Rec_cont]=SBUF;
Rec_cont++;
if(Rec_cont>=18)
{
if(Rec_buff1[14]==0x4f&&Rec_buff1[15]==0x4b&&Rec_buff1[16]==0x0d&&Rec_buff1[17]==0x0a) //返回OK,表示发送命令成功//
{
AT_COM_STEP=4;
Start_rec=0;
Comm_errio=0;
}
}
}
if(Comm_errio>=50)
{
AT_COM_STEP=2;
Start_rec=0;
Comm_errio=0;
}
break;
}
case 4: //发送命令使模块工作于文本方式//
{
Comm_errio=0;
Rec_cont=0;
TI=1;
j=0;
while(j<10)
{
if(TI==1)
{
TI=0;
SBUF=AT_CMGF[j];
j++;
}
}
while(TI==0);
TI=0;
AT_COM_STEP=5;
Start_rec=1;
break;
}
case 5:
{
if(RI==1)
{
RI=0;
Rec_buff1[Rec_cont]=SBUF;
Rec_cont++;
if(Rec_cont>=16)
{
if(Rec_buff1[12]==0x4f&&Rec_buff1[13]==0x4b&&Rec_buff1[14]==0x0d&&Rec_buff1[15]==0x0a) //返回OK,表示发送命令成功//
{
i=0;
Start_rec=0;
Comm_errio=0;
}
}
}
if(Comm_errio>=50)
{
AT_COM_STEP=4;
Start_rec=0;
Comm_errio=0;
}
break;
}
default:
{
Comm_errio=0;
Start_rec=0;
Rec_cont=0;
Rec_stats=0;
AT_COM_STEP=0;
}
}
}
////////////////////////////////////////
Comm_errio=0;
Start_rec=0;
Rec_cont=0;
Rec_stats=0;
Command=0;
Sending=0;
for(j=0;j<82;j++)
{
Rec_buff1[j]=0;
}
Send_oe=1;
Send_stats=1;
Stats_old=P2&0xe0;
if(Stats_old&0x80)
{
Stats_real=Stats_real|0x04;
}
else
{
Stats_real=Stats_real&0xfb;
}
if(Stats_old&0x40)
{
Stats_real=Stats_real|0x02;
}
else
{
Stats_real=Stats_real&0xfd;
}
if(Stats_old&0x20)
{
Stats_real=Stats_real|0x01;
}
else
{
Stats_real=Stats_real&0xfe;
}
IE=0X92;
for(;;)
{
WDOG=~WDOG;
if((P2&0xe0)!=Stats_old)//&&Send_cont==0)
{
delay(15);
if(((P2&0xe0)!=Stats_old)&&Sending==0&&Rec_cont==0) //如果标志是变化并且没有数据正在发送则置发送数据标志//
{
Send_oe=1;
Send_stats=1;
Stats_old=P2&0xe0;
if(Stats_old&0x80)
{
Stats_real=Stats_real|0x04;
}
else
{
Stats_real=Stats_real&0xfb;
}
if(Stats_old&0x40)
{
Stats_real=Stats_real|0x02;
}
else
{
Stats_real=Stats_real&0xfd;
}
if(Stats_old&0x20)
{
Stats_real=Stats_real|0x01;
}
else
{
Stats_real=Stats_real&0xfe;
}
}
}
if(Send_oe)
{
Send_oe=0;
Sending=1;
switch (Send_stats)
{
case 0:
{
break;
}
case 1: //发送短消息号码,AT+CMGS=手机号//
{
Send_buff1[0]=0x41;
Send_buff1[1]=0x54;
Send_buff1[2]=0x2b;
Send_buff1[3]=0x43;
Send_buff1[4]=0x4d;
Send_buff1[5]=0x47;
Send_buff1[6]=0x53;
Send_buff1[7]=0x3d;
Send_buff1[8]=TEL_num[0]; //假设目的号码为13933809394//
Send_buff1[9]=TEL_num[1];
Send_buff1[10]=TEL_num[2];
Send_buff1[11]=TEL_num[3];
Send_buff1[12]=TEL_num[4];
Send_buff1[13]=TEL_num[5];
Send_buff1[14]=TEL_num[6];
Send_buff1[15]=TEL_num[7];
Send_buff1[16]=TEL_num[8];
Send_buff1[17]=TEL_num[9];
Send_buff1[18]=TEL_num[10];
Send_buff1[19]=0x0d;
SBUF=Send_buff1[0];
Send_longth=20;
Send_cont=1;
Command=1;
break;
}
case 2: //发送信息内容//
{
Send_buff1[0]=0x41; //假设发送数据是AA000007BB//
Send_buff1[1]=0x41;
Send_buff1[2]=0x30;
Send_buff1[3]=0x30;
Send_buff1[4]=0x30;
Send_buff1[5]=0x30;
Send_buff1[6]=0x30;
Send_buff1[7]=Stats_real;
Send_buff1[8]=0x42;
Send_buff1[9]=0x42;
Send_buff1[10]=0x1a; //结束符//
// Send_buff1[11]=0x0A;
SBUF=Send_buff1[0];
Send_longth=11;
Send_cont=1;
Command=1;
break;
}
case 3: //发送读取短信命令,AT+CMGR=短信地址//
{
Send_buff1[0]=0x41;
Send_buff1[1]=0x54;
Send_buff1[2]=0x2b;
Send_buff1[3]=0x43;
Send_buff1[4]=0x4d;
Send_buff1[5]=0x47;
Send_buff1[6]=0x52;
Send_buff1[7]=0x3d;
/*
Send_buff1[8]=0x31;//假设读第1条短信//
Send_buff1[9]=0x0d; */
if(message_addr<10)
{
Send_buff1[8]=message_addr|0x30;
Send_buff1[9]=0x0d;
SBUF=Send_buff1[0];
Send_longth=10;
Send_cont=1;
Command=1;
}
else
{
if(message_addr>9&&message_addr<100)
{
Send_buff1[8]=(message_addr/10)|0x30;
Send_buff1[9]=(message_addr%10)|0x30;
Send_buff1[10]=0x0d;
SBUF=Send_buff1[0];
Send_longth=11;
Send_cont=1;
Command=1;
}
else
{
if(message_addr>99&&message_addr<1000)
{
Send_buff1[8]=(message_addr/100)|0x30;
Send_buff1[9]=((message_addr%100)/10)|0x30;
Send_buff1[10]=(message_addr%10)|0x30;
Send_buff1[11]=0x0d;
SBUF=Send_buff1[0];
Send_longth=12;
Send_cont=1;
Command=1;
}
else
{
if(message_addr>999&&message_addr<10000)
{
Send_buff1[8]=(message_addr/1000)|0x30;
Send_buff1[9]=((message_addr%1000)/100)|0x30;
Send_buff1[10]=((message_addr%100)/10)|0x30;
Send_buff1[11]=(message_addr%10)|0x30;
Send_buff1[12]=0x0d;
SBUF=Send_buff1[0];
Send_longth=13;
Send_cont=1;
Command=1;
}
}
}
}
break;
}
case 4: //发送删除短信命令,AT+CMGD=短信地址//
{
Send_buff1[0]=0x41;
Send_buff1[1]=0x54;
Send_buff1[2]=0x2b;
Send_buff1[3]=0x43;
Send_buff1[4]=0x4d;
Send_buff1[5]=0x47;
Send_buff1[6]=0x44;
Send_buff1[7]=0x3d;
if(message_addr<10)
{
Send_buff1[8]=message_addr|0x30;
Send_buff1[9]=0x0d;
SBUF=Send_buff1[0];
Send_longth=10;
Send_cont=1;
Command=1;
}
else
{
if(message_addr>9&&message_addr<100)
{
Send_buff1[8]=(message_addr/10)|0x30;
Send_buff1[9]=(message_addr%10)|0x30;
Send_buff1[10]=0x0d;
SBUF=Send_buff1[0];
Send_longth=11;
Send_cont=1;
Command=1;
}
else
{
if(message_addr>99&&message_addr<1000)
{
Send_buff1[8]=(message_addr/100)|0x30;
Send_buff1[9]=((message_addr%100)/10)|0x30;
Send_buff1[10]=(message_addr%10)|0x30;
Send_buff1[11]=0x0d;
SBUF=Send_buff1[0];
Send_longth=12;
Send_cont=1;
Command=1;
}
else
{
if(message_addr>999&&message_addr<10000)
{
Send_buff1[8]=(message_addr/1000)|0x30;
Send_buff1[9]=((message_addr%1000)/100)|0x30;
Send_buff1[10]=((message_addr%100)/10)|0x30;
Send_buff1[11]=(message_addr%10)|0x30;
Send_buff1[12]=0x0d;
SBUF=Send_buff1[0];
Send_longth=13;
Send_cont=1;
Command=1;
}
}
}
}
break;
}
default:
{
Send_stats=0;
Send_cont=0;
Send_longth=0;
Command=0;
}
}
}
if(errio==1&&Sending==0&&Rec_cont==0)//如果读写24C64错误,在串口空闲时发送出错提示短信//
{
errio=0;
Send_oe=1;
Send_stats=1;
Stats_real=0x45;
}
if(read_message==1&&Rec_message==1&&Sending==0&&Rec_cont==0)//如果收到短信并且已经读取,在串口空闲时删除收到的短信//
{
Send_oe=1;
Send_stats=4;
read_message=0;
Rec_message=0;
}
if(REc_end) //如果接收完成判断是否是所需内容//
{
REc_end=0;
read_message=1;
if(Rec_buff1[73]==0x42&&Rec_buff1[72]==0x42&&Rec_buff1[71]==0x43&&Rec_buff1[65]==0x41&&Rec_buff1[64]==0x41)
{
for(j=0;j<11;j++)
{
TEL_num[j]=Rec_buff1[26+j];
}
//提取短信来源的手机号码,保存到TEL_num[],并保存到AT24C02//
for(j=0;j<11;j++)
{
I2C_writebyte1(j,TEL_num[j]);
}
Send_oe=1;
Send_stats=1;
WDOG=~WDOG;
}
}
//////////////////////////////
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -