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

📄 at.lst

📁 基于STC51通过GPS自主定位导航FAT文件系统程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V7.20   AT                                                                    11/03/2007 17:08:50 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE AT
OBJECT MODULE PLACED IN .\output\AT.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\device\AT.c LARGE ORDER INCDIR(.\src\include) DEBUG OBJECTEXTEND PRINT(
                    -.\output\AT.lst) OBJECT(.\output\AT.obj)

line level    source

   1          //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&AT命令处理&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
   2          //*文件名称:AT.c
   3          
   4          //*文件作用:AT命令处理
   5          
   6          //*文件作者:翟  鹏
   7          
   8          //*创建日期:2004年5月
   9          //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  10          
  11          
  12          
  13          #include <include.h>
  14          
  15          
  16          
  17          //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&私有算法函数部分&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
             -&&&&&&&&&&&&&&
  18          
  19          //********************************************************************************************************
             -***************
  20          //函数作用:把hex串高低4位对调
  21          //参数说明:
  22          //注意事项:
  23          //返回说明:
  24          //********************************************************************************************************
             -***************
  25          static void swap_low4_and_high4(uchar *hex, uchar length)
  26          {
  27   1              uchar i;
  28   1              uchar temp;
  29   1              
  30   1              if(length&0x01)length++;//修正奇偶
  31   1              length>>=1;//转化为字节数
  32   1              
  33   1              for(i=0;i<length;i++)
  34   1              {
  35   2                      temp=hex[i*2];
  36   2                      hex[i*2]=hex[i*2+1];
  37   2                      hex[i*2+1]=temp;
  38   2              }
  39   1      }
  40          
  41          //********************************************************************************************************
             -***************
  42          //函数作用:把7位数据转化成8位数据
  43          //参数说明:
  44          //注意事项:
  45          //返回说明:
  46          //********************************************************************************************************
             -***************
  47          static uchar Char2Bcd(uchar *hex)
  48          {
  49   1              uchar i;
C51 COMPILER V7.20   AT                                                                    11/03/2007 17:08:50 PAGE 2   

  50   1              uchar j;
  51   1      
  52   1              if(*hex>'9')i=*hex-0x37;
  53   1              else i=*hex-0x30;
  54   1              i<<=4;
  55   1              hex++;
  56   1          
  57   1              if(*hex>'9')j=*hex-0x37;
  58   1              else j=*hex-0x30;
  59   1              i=i|(j&0x0f);
  60   1          
  61   1              return i;
  62   1      }
  63          static void  bit7_to_bit8(uchar *Src, uchar *Dec)
  64          {
  65   1             uint i,j;
  66   1             uint MoveTemp;
  67   1      
  68   1             i=0;
  69   1             while(Src[2*i]!=0)
  70   1             {
  71   2                 Src[i]=Char2Bcd(Src+2*i);
  72   2                 i++;
  73   2             }
  74   1             Src[i]=0;
  75   1      
  76   1             i=0;j=0;
  77   1             do{
  78   2                    if( (j%8) ==0 )
  79   2                    {
  80   3                        Dec[j]=Src[i]&0x7f;
  81   3                        j++;
  82   3                        continue;
  83   3                    }
  84   2      
  85   2                    MoveTemp=Src[i]>>(8-j%8);
  86   2                    Dec[j]=MoveTemp+(Src[i+1]<<(j%8));
  87   2                    Dec[j]=0x7f&Dec[j];
  88   2                    i++;j++;
  89   2             }while(Dec[j-1]!=0);
  90   1      }
  91          
  92          //********************************************************************************************************
             -***************
  93          //函数作用:把8位数据转化成7位数据
  94          //参数说明:
  95          //注意事项:
  96          //返回说明:
  97          //********************************************************************************************************
             -***************
  98          static void Bcd2Char(uchar *hex, uchar bcd)//bcd码转化成两个字节表示的hex
  99          {
 100   1          uchar i;
 101   1      
 102   1          i=bcd>>4; // Msb 
 103   1          if(i>9)i+=0x37;
 104   1          else i+=0x30;
 105   1          *hex++=i;
 106   1      
 107   1          i=bcd&0x0f;  // Lsb 
 108   1          if(i>9)i+=0x37;
 109   1          else i+=0x30;
C51 COMPILER V7.20   AT                                                                    11/03/2007 17:08:50 PAGE 3   

 110   1          *hex=i;
 111   1      }
 112          
 113          //********************************************************************************************************
             -***************
 114          //函数作用:处理PDU格式的短信息
 115          //参数说明:PDU数据缓冲区  dst_no--对方号码  datetime--日期时间  content--短信内容
 116          //注意事项:
 117          //返回说明:
 118          //********************************************************************************************************
             -***************
 119          static uchar dispose_PDU(uchar *buf, uchar *dst_no, uchar *datetime)
 120          {
 121   1              uchar *buf_backup=buf;
 122   1              uchar i;
 123   1              uchar length;
 124   1              uchar data_coding;//编码类型
 125   1              
 126   1              //得到短信中心号码长度 并跳过---(0891683108200205F0)
 127   1              hex_to_char(buf,&length);//得到长度
 128   1              buf+=2;//跳过长度字节
 129   1              buf+=(length<<1);//跳过短信中心号码
 130   1              
 131   1              //跳过PDU类型---(24)
 132   1              buf+=2;
 133   1      
 134   1              //得到对方号码 并跳过---(0D91683108026344F0)
 135   1              hex_to_char(buf,&length);//得到长度     
 136   1              buf+=2;//跳过长度字节---(0D)
 137   1              buf+=2;//跳过类型字节---(91)
 138   1              swap_low4_and_high4(buf,length);//号码高低字节转化---(8613802036440F)
 139   1              if(buf[0]==0x38 && buf[1]==0x36)//跳过国家代码---(86)
 140   1              {
 141   2                      buf+=2;
 142   2                      length-=2;
 143   2              }
 144   1              mem_copy(dst_no,buf,length);//拷贝对方号码
 145   1              dst_no[length]=0;//添加结束符
 146   1              if(length&0x01)length++;//修正奇偶
 147   1              buf+=length;//跳过对方号码---(683108026344F0)
 148   1      
 149   1              //跳过PID和DCS  00和08
 150   1              buf+=2;//跳过PID---(00)
 151   1              hex_to_char(buf,&data_coding);//得到编码类型
 152   1              buf+=2;//跳过DCS---(08或00)
 153   1              
 154   1              
 155   1              //得到发送日期时间---(40214251029000) 定长---14字节
 156   1              swap_low4_and_high4(buf,14);//高低字节转化---(041224152009)
 157   1              for(i=0;i<6;i++)
 158   1              {
 159   2                      mem_copy(datetime,buf,2);//拷贝年
 160   2                      datetime+=3;buf+=2;
 161   2              }
 162   1              *(datetime-1)=0;//添加结束符
 163   1              buf+=2;//跳过毫秒
 164   1              
 165   1              //得到内容长度 并跳过
 166   1              hex_to_char(buf,&length);//得到长度
 167   1              buf+=2;//跳过长度
 168   1              
 169   1              //根据编码类型判断是否需要PDU字节转换
C51 COMPILER V7.20   AT                                                                    11/03/2007 17:08:50 PAGE 4   

 170   1              if(data_coding==0x00)bit7_to_bit8(buf,buf_backup);//英文---PDU编码进行7转8
 171   1              else    str_copy(buf_backup,buf);//中文----unicode字符串直接拷贝
 172   1              
 173   1              return data_coding;
 174   1      }
 175          
 176          
 177          
 178          //命令消息定义
 179          #define AT_CMD_HEAD             "AT"            //命令头
 180          #define AT_CMD_END              "\r\n"          //命令尾
 181          #define AT_MSG_READY            "RDY"           //模块复位成功的信息
 182          #define AT_MSG_SIMOK            "+CPIN: READY"  //SIM卡成功的信息
 183          
 184          #define AT_MSG_LOGINOK          "+CREG: "       //登陆成功的信息
 185          #define AT_MSG_SMSRECEIVE       "+CMT"          //收到短信的信息
 186          #define AT_MSG_RING             "RING"          //收到来电的信息
 187          #define AT_MSG_NOCARR           "NO CARR"       //对方挂机
 188          #define AT_MSG_CLIP             "+CLIP"         //收到来电显示的信息
 189          #define AT_MSG_IPSTATE          "STATE:"        //IP致命错误提示
 190          #define AT_MSG_OK               "OK"            //命令正确的信息
 191          #define AT_MSG_SENDOK           "SEND OK"       //IP发送成功的信息
 192          #define AT_MSG_CONNECTOK        "CONNECT OK"    //IP连接成功的信息
 193          #define AT_MSG_CLOSEOK          "CLOSE OK"      //IP连接关闭成功的信息
 194          #define AT_MSG_SHUTOK           "SHUT OK"       //移动场景关闭成功的信息
 195          #define AT_MSG_SIGNAL           "+CSQ"          //信号强度信息
 196          #define AT_MSG_ERROR            "ER"            //命令错误的信息
 197          #define AT_MSG_SENDFAIL         "SEND FAIL"     //发送失败的信息
 198          #define AT_MSG_CONNECTFAIL      "CONNECT FAIL"  //连接失败的信息
 199          //命令发送字符串定义
 200          #define AT_CMD_DISECHO          "E0"                    //禁止回显命令行
 201          #define AT_CMD_CREG             "+CREG=1"               //主动提供网络注册信息
 202          #define AT_CMD_SMSPDU           "+CMGF=0"               //设置短信息为PDU模式
 203          #define AT_CMD_SMSTOCOMM        "+CNMI=2,2,2,1,0"       //短消息直接从串口输出
 204          #define AT_CMD_GSMCHARSET       "+CSCS=\"GSM\""         //设置GSM字符集
 205          #define AT_CMD_TCPIPRECEIVEHINT "+CIPHEAD=1"            //设置TCPIP接收数据包头提示
 206          #define AT_CMD_TCPIPSENDHINT    "+CIPSPRT=0"            //关闭TCPIP数据发送时的> 提示
 207          #define AT_CMD_FIXLOCALPORT     "+CIPFLP=0"             //取消固定本地端口
 208          #define AT_CMD_SIGNAL           "+CSQ"                  //信号强度
 209          #define AT_CMD_CLOCK            "+CCLK"                 //时钟
 210          #define AT_CMD_APNSETUP         "+CSTT="                //设置APN
 211          #define AT_CMD_IPACTIVE         "+CIICR"                //激活移动场景
 212          #define AT_CMD_GETLOCALIP       "+CIFSR"                //获得本地IP地址

⌨️ 快捷键说明

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