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

📄 modembj.c

📁 用来MCU控制
💻 C
字号:
/**********该程序是被叫程序,程序复位后红灯亮,当被叫程序运行2分钟后,方可运行主叫程序。在建立链接后, 本程序设定如果接收到的数据是以qq开头,
     且接收到的数据位数超过10位时,不再接收数据,绿灯亮,发挂机命令红灯灭结束。如果接收到的数据不是以qq开头,
     且接收到的数据位数超过10位时,不再接收数据,黄灯亮,发挂机命令红灯灭结束,***************/
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
#include <stdio.h>
#define   uchar  unsigned  char
sbit P0_0=P0^0;
sbit P0_1=P0^1;
sbit P0_2=P0^2;
uchar    connbuf[11];
uchar   i,h;
unsigned long  j;
uchar   buf[8];
uchar   idata databuf[70];
bit     flag ;
bit     right;
/*********初始化子程序**************/
   void csh ( )
   {
        SCON=0x50;
       TMOD=0X20;
       TL1=0xF4;
       TH1=0xF4;
        ET1=0;
        ES=1;
        EA=0;
       TR1=1;
        RI=0;
        TI=0;
      P0_0=0;
   }
/**********发送AT指令****************/
    void   atsend(uchar  *commbuf)
    {
    uchar i,j,a,buf[8];
      i=*(commbuf);
      for(j=1;j<(i+1);j++)
      {
        TI=0;
        a=*(commbuf+j);
        SBUF=*(commbuf+j);
        while(TI==0);
       }
        TI=0;
        }
 /**********装载AT&F***********/
  void  fsat( )
   {
     L1:
     connbuf[0]=0x06;
     connbuf[1]='A';
     connbuf[2]='T';
     connbuf[3]='&';
     connbuf[4]='F';
     connbuf[5]=0x0a;
     connbuf[6]=0x0d;
     atsend(&connbuf[0]);
 /********接收发送完AT&F后的返回码*************/

      for (i=0;i<8;i++)
      {
        while (RI==0);
        buf[i]=SBUF;
        RI=0;
      }

 /*********判断发送完AT&F后的返回码是否为OK,为OK时发送下一个AT指令ATS37=6,否则继续发送AT&F*******/
          flag=0X00;
      for (i=0;i<8;i++)
      {
        if(buf[i]==0X4f)
        {
          if(buf[i+1]==0x4b)
           {flag=1;}
         }
       }

       for(j=0;j<0xffff;j++);
          if(!flag)
          {
             goto L1;
           }
  /***************清空buf*******************/
     for (i=0;i<8;i++)
     {
       buf[i]=0  ;
       }
 /***********装载ATS37=6*********************/
    L2:
     connbuf[0]=0x09;
     connbuf[1]='A';
     connbuf[2]='T';
     connbuf[3]='S';
     connbuf[4]='3';
     connbuf[5]='7';
     connbuf[6]='=';
     connbuf[7]='6';
     connbuf[8]=0x0a;
     connbuf[9]=0x0d;
     atsend(&connbuf[0]);
 /********接收发送完ATS37=6后的返回码*************/

      for (i=0;i<8;i++)
      {
        while (RI==0);
        buf[i]=SBUF;
        RI=0;
      }

 /*********判断发送完ATS37=6后的返回码是否为OK,为OK时发送下一个AT指令AT\N0,否则继续发送ATS37=6*******/
          flag=0X00;
      for (i=0;i<8;i++)
      {
        if(buf[i]==0X4f)
        {
          if(buf[i+1]==0x4b)
           {flag=1;}
         }
       }

       for(j=0;j<0xffff;j++);
          if(!flag)
          {
             goto L2;
           }
 /***************清空buf*******************/
     for (i=0;i<8;i++)
     {
       buf[i]=0  ;
       }
 /**********装载AT\N0*******************/
   L3:
     connbuf[0]=0x07;
     connbuf[1]='A';
     connbuf[2]='T';
     connbuf[3]=0X5C;
     connbuf[4]='N';
     connbuf[5]='0';
     connbuf[5]=0x0a;
     connbuf[6]=0x0d;
     atsend(&connbuf[0]);
 /********接收发送完AT\N0后的返回码*************/

      for (i=0;i<8;i++)
      {
        while (RI==0);
        buf[i]=SBUF;
        RI=0;
      }

 /*********判断发送完AT\N0后的返回码是否为OK,为OK时发送下一个AT指令ATS0=1,否则继续发送AT\N0*******/
          flag=0X00;
      for (i=0;i<8;i++)
      {
        if(buf[i]==0X4f)
        {
          if(buf[i+1]==0x4b)
           {flag=1;}
         }
       }

       for(j=0;j<0xffff;j++);
          if(!flag)
          {
             goto L3;
           }

  /***************清空buf*******************/
     for (i=0;i<8;i++)
     {
       buf[i]=0  ;
       }
   /***************装载ATS0=1*************/
      L4:
     connbuf[0]=0x08;
     connbuf[1]='A';
     connbuf[2]='T';
     connbuf[3]='S';
     connbuf[4]='0';
     connbuf[5]='=';
     connbuf[6]='1';
     connbuf[7]=0x0a;
     connbuf[8]=0x0d;
     atsend(&connbuf[0]);
 /********接收发送完ATS0=1后的返回码*************/

      for (i=0;i<8;i++)
      {
        while (RI==0);
        buf[i]=SBUF;
        RI=0;
      }

 /*********判断发送完ATS0=1后的返回码是否为OK,为OK时等待联络信号,否则继续发送ATS0=1*******/
          flag=0X00;
      for (i=0;i<8;i++)
      {
        if(buf[i]==0X4f)
        {
          if(buf[i+1]==0x4b)
           {flag=1;}
         }
       }

       for(j=0;j<0xffff;j++);
          if(!flag)
          {
             goto L4;
           }


 /*************延时等待联接信号CONNET 2400,用中断接收**********/
      L5:
        RI=0;
        ES=1;
        EA=1;
         i=0;
        for(j=0;j<0xffff;j++);

        EA=0;
        ES=0;
 /*****************判断是否建立联接,如果没有建立联接继续延时等待联接信号,建立联接后可接收数据**/
          flag=0X00;
          h=i;
            for (i=0;i<h;i++)
            {
              if(databuf[i]==0X43)
              {
                if(databuf[i+1]==0X4f)
                {flag=1;}
               }
             }
           if (!flag)
             {
               goto  L5;
              }

              }
    /**************清空数据接收区,接收数据************/
          void   jsdata(   )
          {
            for (i=0;i<70;i++)
            {
               databuf[i]=0;
               }
             for(j=0;j<0xfff;j++);/*****延时******/
             for(j=0;j<0xfff;j++);
             for(j=0;j<0xfff;j++);
  /***************当接收到的数据位数大于10时不再接收数据*****/
              for(i=0;i<10;i++)
          {
            while(RI==0);
            databuf[i]=SBUF;
            RI=0;
           }
    /*****************判断接收到的数据是否正确**********/
           right=0X00;
            for (i=0;i<10;i++)
            {
              if(databuf[i]==0X71)
              {
                if(databuf[i+1]==0X71)
                {right=1;}
               }
             }
          if (!right)
       {
        P0_2=0;
        }
        P0_1=0 ;
             }
   /******************接收完数据后发挂机命令************/
         void   gj( )
         {
 connbuf[0]=0x03;
 connbuf[1]='+';
 connbuf[2]='+';
 connbuf[3]='+';
 atsend(&connbuf[0]);
 connbuf[0]=0x06;
 connbuf[1]='A';
 connbuf[2]='T';
 connbuf[3]='H';
 connbuf[4]='0';
 connbuf[5]=0X0a;
 connbuf[6]=0x0d;
 atsend(&connbuf[0]);
 P0_0=1;
 while(1)
 {
    }
 }


     /***********中断服务函数,用于接收返回码**********/
    void  int4( ) interrupt 4
        {
           EA=0;
           while(RI==1)
           {
            RI=0;
            databuf[i]=SBUF;
            i=i+1;
           }
           EA=1;
           }
     /**********主函数****************/
    void  main()
{
  csh ( ) ;
  fsat( ) ;
  jsdata( );
  gj( );
   }


























⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -