📄 西门子无线手机模块通信at命令.c
字号:
Send_Char('3');
Send_Char('2');
Send_Char('0');
Send_Char('8');
Send_Char('A');
Send_Char('7');
Send_Char('7');
Send_Char('2');
for(n=0;n<2;n++)
{
c=R_S_Data[n];
c=(c&0xf0)>>4;
if(c>9)
c=c-9+0x40;
else
c=c+0x30;
Send_Char(c);
c=R_S_Data[n];
c=(c&0x0f);
if(c>9)
c=c-9+0x40;
else
c=c+0x30;
Send_Char(c);
}
c=Station;
c=(c&0xf0)>>4;
if(c>9)
c=c-9+0x40;
else
c=c+0x30;
Send_Char(c);
c=Station;
c=(c&0x0f);
if(c>9)
c=c-9+0x40;
else
c=c+0x30;
Send_Char(c);
for(n=2;n<113;n++)
{
c=R_S_Data[n];
c=(c&0xf0)>>4;
if(c>9)
c=c-9+0x40;
else
c=c+0x30;
Send_Char(c);
c=R_S_Data[n];
c=(c&0x0f);
if(c>9)
c=c-9+0x40;
else
c=c+0x30;
Send_Char(c);
}
Send_Char(0x1a);
while(1)
{c=Recv_Data();
if(Recv_bit==0)return(0);
if(c=='+')
{c=Recv_Data();
if(Recv_bit==0)return(0);
if(c=='C')break;
}
}
L2=0;
return(1);
}
/*****************/
bit AT_CMGL()
{
uchar c;
No_bit=0;
Send_Char('A');
Send_Char('T');
Send_Char('+');
Send_Char('C');
Send_Char('M');
Send_Char('G');
Send_Char('L');
Send_Char('=');
Send_Char('4');
Send_Char(0x0d);
c=Recv_Data();
if(Recv_bit==0)return(0);
c=Recv_Data();
if(Recv_bit==0)return(0);
while(1)
{c=Recv_Data();
if(Recv_bit==0)return(0);
if(c=='+')
{c=Recv_Data();
if(Recv_bit==0)return(0);
if(c=='C')
{c=Recv_Data();
if(Recv_bit==0)return(0);
if(c=='M')
{c=Recv_Data();
if(Recv_bit==0)return(0);
if(c=='G')
{c=Recv_Data();
if(Recv_bit==0)return(0);
if(c=='L')break;
}
}
}
}
}
c=Recv_Data();//:
if(Recv_bit==0)return(0);
c=Recv_Data();//space
if(Recv_bit==0)return(0);
Message_No=Recv_Data();//CSD_No
if(Recv_bit==0)return(0);
c=Recv_Data();//,
if(Recv_bit==0)return(0);
if(c!=',')
{
Message_NoB=c;
No_bit=1;
c=Recv_Data();//,
if(Recv_bit==0)return(0);
}
Statu_Bit=Recv_Data();//Statu_Bit
if(Recv_bit==0)return(0);
Delay_2000ms();
Delay_2000ms();
return(1);
}
/**************************/
bit TongXinCeShi()
{
Clear_R_S();
R_S_Data[0]=0x8a;
R_S_Data[2]=0;
R_S_Data[1]=0xa0;
if(Send_Message()==0)return(0);
return(1);
}
/**************************/
bit ShangChuanStation()
{
uint i;
Clear_R_S();
if(ShangChuanStationinformation()==0)return(0);
R_S_Data[0]=0x8a;
R_S_Data[1]=0xb4;
R_S_Data[2]=16;
R_S_Data[3]=Sta_No;
R_S_Data[4]=Rating[0];
R_S_Data[5]=Rating[1];
R_S_Data[6]=Up_Rating;
R_S_Data[7]=Down_Rating;
R_S_Data[8]=Timeout_Set;
for(i=0;i<5;i++)
{
R_S_Data[i+9]=Short_Center_Code[i];
}
for(i=0;i<5;i++)
{
R_S_Data[i+14]=Contral_Center_Code[i];
}
if(Send_Message()==0)return(0);
return(1);
}
/**************************/
bit ShangChuan_1()
{
uint i;
Month=R_S_Data[3]&0x0f;
Month=((R_S_Data[3]&0xf0)>>4)*10+Month;
Day=R_S_Data[4]&0x0f;
Day=((R_S_Data[4]&0xf0)>>4)*10+Day;
Address_H=0x00;
Address_L=0x00;
for(i=1;i<Day;i++)
{
CY=0;
Address_L=Address_L+0x70;
if(CY==1)Address_H++;
}
if((Month&0x01)==0x01)
{
CY=0;
Address_L=Address_L+0x90;
if(CY==1)Address_H++;
Address_H=Address_H+0x0d;
}
Clear_R_S();
if(DingShiShangChuan_OneDay(Address_H,Address_L)==0)return(0);
R_S_Data[0]=0x8a;
R_S_Data[1]=0xb1;
/****/
R_S_Data[110]=(R_S_Data[110]&0x0f)|(((Day/10)*16)&0xf0);
R_S_Data[112]=(R_S_Data[112]&0x0f)|(((Day-((Day/10)*10))*16)&0xf0);
R_S_Data[108]=(R_S_Data[108]&0x0f)|((Month*16)&0xf0);
/****/
if(Send_Message()==0)return(0);
return(1);
}
/**************************/
bit ShangChuan_2()
{
Month=R_S_Data[3]&0x0f;
Month=((R_S_Data[3]&0xf0)>>4)*10+Month;
if((Month&0x01)==0x01)
{
Address_L=0x90;
Address_H=0x1f;
}
else
{
Address_L=0x80;
Address_H=0x1f;
}
Clear_R_S();
if(DingShiShangChuan_OneMonth(Address_H,Address_L)==0)return(0);
R_S_Data[0]=0x8a;
R_S_Data[1]=0xb2;
/****/
R_S_Data[110]=(R_S_Data[110]&0x0f)|(((Day/10)*16)&0xf0);
R_S_Data[112]=(R_S_Data[112]&0x0f)|(((Day-((Day/10)*10))*16)&0xf0);
R_S_Data[108]=(R_S_Data[108]&0x0f)|((Month*16)&0xf0);
/****/
if(Send_Message()==0)return(0);
return(1);
}
/**************************/
void Clear_R_S(void)
{
int i;
for(i=0;i<114;i++)
{
R_S_Data[i]=0xff;
}
}
/**********************/
void int0(void) interrupt 0//发送断电信息
{
uint i;
uchar code td[12]={0x76,0xd1,0x6d,0x4b,0x70,0xb9,0x50,0x5c,0x75,0x35,0x30,0x02};
uchar c;
L2=1;
A0=0;
A1=1;
A2=0;
A3=1;
Send_Char('A');
Send_Char('T');
Send_Char('+');
Send_Char('C');
Send_Char('M');
Send_Char('G');
Send_Char('S');
Send_Char('=');
Send_Char(0x32);
Send_Char(0x36);
Send_Char(0x0d);
c=Recv_Data();
if(Recv_bit==0)return;
c=Recv_Data();
if(Recv_bit==0)return;
while(1)
{
c=Recv_Data();
if(Recv_bit==0)return;
if(c=='>')
c=Recv_Data();
if(Recv_bit==0)return;
if(c==' ')break;
}
Send_Char('0');
Send_Char('8');
Send_Char('9');
Send_Char('1');
Send_Char('6');
Send_Char('8');
Send_Char('3');
Send_Char('1');
c=Short_Center_Code[0];
c=(c&0x0f)+0x30;
Send_Char(c);
c=Short_Center_Code[0];
c=((c&0xf0)>>4)+0x30;
Send_Char(c);
c=Short_Center_Code[1];
c=(c&0x0f)+0x30;
Send_Char(c);
c=Short_Center_Code[1];
c=((c&0xf0)>>4)+0x30;
Send_Char(c);
c=Short_Center_Code[2];
c=(c&0x0f)+0x30;
Send_Char(c);
c=Short_Center_Code[2];
c=((c&0xf0)>>4)+0x30;
Send_Char(c);
c=Short_Center_Code[3];
c=(c&0x0f)+0x30;
Send_Char(c);
c=Short_Center_Code[3];
c=((c&0xf0)>>4)+0x30;
Send_Char(c);
c=Short_Center_Code[4];
c=(c&0x0f)+0x30;
Send_Char('f');
c=Short_Center_Code[4];
c=((c&0xf0)>>4)+0x30;
Send_Char(c);
Send_Char('1');
Send_Char('1');
Send_Char('F');
Send_Char('F');
Send_Char('0');
Send_Char('B');
Send_Char('8');
Send_Char('1');
Send_Char('3');
Send_Char('1');
c=Power_Lost_Code[0];
c=(c&0x0f)+0x30;
Send_Char(c);
c=Power_Lost_Code[0];
c=((c&0xf0)>>4)+0x30;
Send_Char(c);
c=Power_Lost_Code[1];
c=(c&0x0f)+0x30;
Send_Char(c);
c=Power_Lost_Code[1];
c=((c&0xf0)>>4)+0x30;
Send_Char(c);
c=Power_Lost_Code[2];
c=(c&0x0f)+0x30;
Send_Char(c);
c=Power_Lost_Code[2];
c=((c&0xf0)>>4)+0x30;
Send_Char(c);
c=Power_Lost_Code[3];
c=(c&0x0f)+0x30;
Send_Char(c);
c=Power_Lost_Code[3];
c=((c&0xf0)>>4)+0x30;
Send_Char(c);
c=Power_Lost_Code[4];
c=(c&0x0f)+0x30;
Send_Char('f');
c=Power_Lost_Code[4];
c=((c&0xf0)>>4)+0x30;
Send_Char(c);
Send_Char('3');
Send_Char('2');
Send_Char('0');
Send_Char('8');
Send_Char('A');
Send_Char('7');
Send_Char('0');
Send_Char('c');
for(i=0;i<12;i++)
{
c=td[i];
c=(c&0xf0)>>4;
if(c>9)
c=c-9+0x40;
else
c=c+0x30;
Send_Char(c);
c=td[i];
c=(c&0x0f);
if(c>9)
c=c-9+0x40;
else
c=c+0x30;
Send_Char(c);
}
Send_Char(0x1a);
while(1)
{c=Recv_Data();
if(Recv_bit==0)return;
if(c=='+')
{c=Recv_Data();
if(Recv_bit==0)return;
if(c=='C')break;
}
}
return;
L2=0;
}
/*****************/
void Error0(void) //初始化出错
{
L1=0;
//L2=0;
//L3=0;
Error_bit=1;
Delay_2000ms();
Delay_2000ms();
L1=1;
}
/*****************/
void Process_Message(void)
{
int i;
Message_NoB=0x30;
for(i=1;i<=Message_Capability;i++)
{
Clear_R_S(); //置数组R_S_Data[115] 为oxff
L2=1; //L2亮,表示与TC35通讯
A0=0; //断开与主CPU通讯,与TC35连接
A1=1; //
A2=0; //
A3=1; //
//Delay_100ms(); //延时
if(i>9)
{
No_bit=1;
}
else
{
No_bit=0;
}
/*
if(i>89)
{
Message_No=0x39;
Message_NoB =0x30+i-90;
}
else if(i>79)
{
Message_No=0x38;
Message_NoB =0x30+i-80;
}
else if(i>69)
{
Message_No=0x37;
Message_NoB =0x30+i-70;
}
else if(i>59)
{
Message_No=0x36;
Message_NoB =0x30+i-60;
}
else if(i>49)
{
Message_No=0x35;
Message_NoB =0x30+i-50;
}
else if(i>39)
{
Message_No=0x34;
Message_NoB =0x30+i-40;
}
else if(i>29)
{
Message_No=0x33;
Message_NoB =0x30+i-30;
}
else */
if(i>19)
{
Message_No=0x32;
Message_NoB =0x30+i-20;
}
else if(i>9)
{
Message_No=0x31;
Message_NoB =0x30+i-10;
}
if(Read_GSM_Text()==0) //读短信息
{
Error0();
continue;
}
if(Message_NoB==0x99) continue;
Delay_2000ms();
if(Delect_GSM_Message()==0) //删除短信息
{
Error0();
continue;
}
Delay_2000ms();
A0=1; //与主CPU通讯
A1=0;
A2=1;
A3=0;
L2=0;
L3=1;
if(R_S_Data[0]!=0x8a) continue;
switch(R_S_Data[1])
{
case 0xa0:
if(TongXinCeShi()==0)Error0();//通信测试
case 0xa1:
if(Write_Station_Information()==0)Error0();//初始化站点
Clear_R_S();
R_S_Data[0]=0x8a;
R_S_Data[1]=0xa1;
R_S_Data[2]=0;
if(Send_Message()==0)Error0();
case 0xa2:
if(Power_Lost_Set()==0)Error0();//写停电报警号码
Clear_R_S();
R_S_Data[0]=0x8a;
R_S_Data[1]=0xa2;
R_S_Data[2]=0;
if(Send_Message()==0)Error0();
case 0xa3:
if(Timeout_Setup()==0)Error0();//写定时上传方式
Clear_R_S();
R_S_Data[0]=0x8a;
R_S_Data[1]=0xa3;
R_S_Data[2]=0;
if(Send_Message()==0)Error0();
case 0xa4:
{
}
case 0xb1:
if(ShangChuan_1()==0)Error0();//立即上传
case 0xb2:
if(ShangChuan_2()==0)Error0();//立即上传一个月统计信息
case 0xb4:
if(ShangChuanStation()==0)Error0();//上传站点信息
case 0xb5:
Clear_R_S();
if(ShangChuanLaiTingDian_OneMonth()==0)Error0();//上传来停电
R_S_Data[0]=0x8a;
R_S_Data[1]=0xb5;
if(Send_Message()==0)Error0();
default:
{
}
}
}
}
/*******************/
main()
{
Lab2:
No_bit=0; //短信记录号大于9标志
in0=1; // ????????
ini(); //串口初始化
IGT=1; //手机模块上电高电平脉冲
Delay_100ms(); //延时
L1=1; //LED指示 L1亮电源指示
L2=0; //LED指示
L3=0; //LED指示
IGT=0; //手机模块上电低电平脉冲
Delay_100ms(); //延时
IGT=1; //手机模块上电高电平脉冲
L3=1; //与主CPU通讯 L1,L3亮
Clear_R_S(); //置数组R_S_Data[115] 为oxff
A0=1; //切换与主CPU通讯
A1=0; //
A2=1; //
A3=0; //
Delay_2000ms(); //延时
if(ShangChuanStationinformation()==0)Error0();//读取站点信息,出错则L1,L2=0,L3=1
//站号、电压等级、上下限、定时传送方式
//短信中心号码,控制中心号码、停电报警号码
L3=0; //L2亮,表示与TC35通讯
L2=1; //
A0=0; //断开与主CPU通讯,与TC35连接
A1=1; //
A2=0; //
A3=1; //
Delay_2000ms(); //延时
if(TC35_ini()==0)Error0(); //设置短信格式为PDU格式
Delay_2000ms(); //延时
if(Set_Mode()==0)Error0(); //设置新信息提示方式
Delay_2000ms();
if(Get_Message_Capability()==0)Error0(); //读取短信容量
Delay_2000ms();
Process_Message();
L3=1;
Delay_2000ms();
Delay_2000ms();
L1=1;
L2=0;
L3=0;
Lab1:
if(Error_bit==1)
{
Error_bit=0;
goto Lab2;
}
L1=1;
L2=1;
L3=1;
Delay_2000ms();
Delay_2000ms();
L2=0;
L3=0;
A0=1; //停止向TC35发送信息
A1=0; //允许向主CPU发送信息
A2=0; //允许接收TC35信息
A3=0; //允许接收主CPU信息
Clear_R_S();
while(1)
{
Recv[0]=Recv_Data();
if(Recv_bit==1)break;
}
if(Recv[0]==0x7a) //接收的信息为主CPU发来的信息
{
L3=1; //L3亮
A0=1; //禁止向TC35发信息
A1=0; //允许向主CPU发信息
A2=1; //禁止接收TC35信息
A3=0; //允许接收主CPU信息
if(Recv_CPU_Data()==0)Error0(); //定时上传信息
L1=1;
L2=0;
L3=0;
{ //定时传送结束后系统复位
}
goto Lab1;
}
else if(Recv[0]=='+') //接收到TC35的信息
{
Process_Message();
}
goto Lab1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -