⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 西门子无线手机模块通信at命令.c

📁 西门子无线手机模块AT COMMAND 用于无线数传(C51MCU)
💻 C
📖 第 1 页 / 共 3 页
字号:
   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 + -