C51 COMPILER V9.00   SWANTECH_TCPIP_FORSIM900                                              08/12/2012 15:38:06 PAGE 1   


C51 COMPILER V9.00, COMPILATION OF MODULE SWANTECH_TCPIP_FORSIM900
OBJECT MODULE PLACED IN SwanTech_TCPIP_ForSIM900.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SwanTech_TCPIP_ForSIM900.c LARGE BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          #include <stdio.h>
   3          #include <string.h>
   4          #include "STC12C5A60S2.h"
   5          
   6          //! 服务器IP地址与端口号,注意,用户需要将此IP替换为
   7          //! 自己服务器的公网IP地址
   8          #define TCPIP_SERVER_IPADDR "115.171.51.103"
   9          #define TCPIP_SERVER_PORT   "8088"
  10          
  11          //! 串口发送与接收缓冲区大小
  12          #define TTY_MAX_BUFFER_SIZE 256
  13          //! 串口发送与接收缓冲区
  14          char ttyBuffer[TTY_MAX_BUFFER_SIZE];
  15          
  16          //! TCPIP发送与接收缓冲区大小
  17          #define TCPIP_MAX_BUFFER_SIZE 256 
  18          //! TCPIP发送与接收缓冲区
  19          char tcpipBuffer[TCPIP_MAX_BUFFER_SIZE];
  20          
  21          //! 串口0初始化函数, 此串口用作接收终端控制命令
  22          //! 晶振频率：22.1184MHz
  23          //! 串口0波特率：9600
  24          void Uart0_Init(void)   //9600bps@22.1184MHz
  25          {
  26   1        PCON |= 0x80;       //使能波特率倍速位SMOD
  27   1        SCON = 0x50;        //8位数据,可变波特率
  28   1        AUXR |= 0x40;       //定时器1时钟为Fosc,即1T
  29   1        AUXR &= 0xfe;       //串口1选择定时器1为波特率发生器
  30   1        TMOD &= 0x0f;       //清除定时器1模式位
  31   1        TMOD |= 0x20;       //设定定时器1为8位自动重装方式
  32   1        TL1 = 0x70;         //设定定时初值
  33   1        TH1 = 0x70;         //设定定时器重装值
  34   1        ET1 = 0;            //禁止定时器1中断
  35   1        TR1 = 1;            //启动定时器1
  36   1      }
  37          
  38          //! 串口0字符串输出函数
  39          //! 参数说明：pString为字符串缓冲区首地址
  40          void Uart0_PutString(char* pString)
  41          { 
  42   1        unsigned short i = 0; 
  43   1        while(pString[i]) 
  44   1        {     
  45   2          SBUF = pString[i++];
  46   2          while(!TI);
  47   2          TI = 0;
  48   2        }
  49   1      }
  50          
  51          //! 串口0字符串读取函数, 获取一行数据, 遇到换行符为止
  52          //! 参数说明：pBuffer为缓冲区首地址, nBufferLen为缓冲区大小, nTimeOut为超时时间
  53          //!          如果nTimeOut=0, 那么函数会阻塞, 直到缓冲区满或遇到换行符
  54          unsigned short Uart0_GetALine(char* pBuffer, unsigned char nBufferLen, unsigned char nTimeOut)
  55          {
C51 COMPILER V9.00   SWANTECH_TCPIP_FORSIM900                                              08/12/2012 15:38:06 PAGE 2   

  56   1        char ch = 0;
  57   1        unsigned int i = 0, j = 0, k = 0;
  58   1      
  59   1        k = 20000*nTimeOut;
  60   1        for(i = 0, j = 0; i < nBufferLen; i++)
  61   1        {
  62   2          while(1)
  63   2          {
  64   3            if(RI)
  65   3            {
  66   4              RI = 0;         //清除接收完成标志
  67   4              pBuffer[i] = SBUF;
  68   4              //! 回显给终端显示
  69   4              SBUF = pBuffer[i];
  70   4              while(!TI);
  71   4              TI = 0;
  72   4              if(pBuffer[i] == 0x0d)
  73   4              {  
  74   5                pBuffer[i] = 0x00;
  75   5                return i;
  76   5              }
  77   4              break;
  78   4            }
  79   3            else if(nTimeOut == 0)
  80   3              continue;
  81   3            else
  82   3              j++;
  83   3      
  84   3            if(j == k)
  85   3              break;
  86   3          }
  87   2        }
  88   1      
  89   1        return i;
  90   1      }
  91          
  92          //! 串口1初始化函数, 此串口用作控制GSM模块
  93          //! 晶振频率：22.1184MHz
  94          //! 串口1波特率：9600
  95          void Uart1_Init(void)   //9600bps@22.1184MHz
  96          {
  97   1        AUXR |= 0x08;  //使能波特率倍速位S2SMOD
  98   1        S2CON = 0x50;  //8位数据,可变波特率
  99   1        BRT = 0x70;    //设定独立波特率发生器重装值
 100   1        AUXR |= 0x04;  //独立波特率发生器时钟为Fosc,即1T
 101   1        AUXR |= 0x10;  //启动独立波特率发生器
 102   1      }
 103          
 104          //! 串口1字符串输出函数
 105          //! 参数说明：pString为字符串缓冲区首地址
 106          //! 备注：此函数一方面向串口1发送数据,
 107          //!       另一方面也向串口0发送数据,
 108          //!       目的是为了方便调试
 109          void Uart1_PutString(char* pString)
 110          { 
 111   1        unsigned char i = 0;
 112   1      
 113   1        //! 向串口1写数据
 114   1        i = 0;
 115   1        while(pString[i])
 116   1        {     
 117   2          //! 向串口0写数据,目的是方便调试
C51 COMPILER V9.00   SWANTECH_TCPIP_FORSIM900                                              08/12/2012 15:38:06 PAGE 3   

 118   2          SBUF = pString[i];
 119   2          while(!TI);
 120   2          TI = 0;
 121   2      
 122   2          S2BUF = pString[i++];
 123   2          while(!(S2CON&S2TI));
 124   2          S2CON &= ~S2TI;
 125   2        }
 126   1      }
 127          
 128          /**
 129           * @func Uart1_GetString
 130           * @author SwanTech (2011/12/14)
 131           * @param pBuffer 缓冲区地址
 132           * @param nBufferLen 缓冲区长度
 133           * @param nTimeOut 读取返回数据的超时时间
 134           * @return unsigned short 成功: 返回接收到的字节数. 失败: 返回-1
 135           * @remark 注意nTimeOut超时时间从接收到第一个字符开始计数
 136           */
 137          unsigned short Uart1_GetString(char* pBuffer, unsigned short nBufferLen, unsigned short nTimeOut)
 138          {
 139   1        unsigned short i = 0, j = 0, k = 0;
 140   1      
 141   1        //! 此函数固定的超时时间,也就是说如果根本就
 142   1        //! 没有应答数据时,函数经过这个固定超时时间会返回
 143   1        const unsigned short nFixedTimeout = 65500;
 144   1      
 145   1        for(i = 0; (i < nFixedTimeout && k == 0); i++)
 146   1        {
 147   2          for(j = 0, k = 0; j < nTimeOut; j++)
 148   2          {
 149   3            if(S2CON & S2RI)
 150   3            {
 151   4              S2CON &= ~S2RI;
 152   4              pBuffer[k++] = S2BUF;
 153   4      
 154   4              SBUF = S2BUF; //! 向串口0写数据,目的是方便调试
 155   4              while(!TI);
 156   4              TI = 0;
 157   4      
 158   4              if(k == 1) //! 应答数据第一次到来,重新计算超时值
 159   4                j = 0;
 160   4              else if(k+1 == nBufferLen) //! 字符串缓冲区已满
 161   4                break;
 162   4            }
 163   3          }
 164   2        }
 165   1        pBuffer[k] = 0x00; //! 字符串必须以0x00结束
 166   1      
 167   1        return k;
 168   1      }
 169          
 170          void SwanTech_LogoDisplay(void)
 171          {
 172   1        Uart0_PutString("\n\r+------------------------------+\n\r");
 173   1        Uart0_PutString("|      #鸿鹄电子科技#          |\n\r");
 174   1        Uart0_PutString("|  http://swantech.taobao.com  |\n\r");
 175   1        Uart0_PutString("+------------------------------+\n\r");
 176   1        Uart0_PutString("|     TCPIP功能测试程序        |\n\r");
 177   1        Uart0_PutString("|    适用平台:STC12C5A60S2     |\n\r");
 178   1        Uart0_PutString("+------------------------------+\n\r");
 179   1      
C51 COMPILER V9.00   SWANTECH_TCPIP_FORSIM900                                              08/12/2012 15:38:06 PAGE 4   

 180   1      }
 181          void SwanTech_CommandDisplay(void)
 182          {
 183   1        Uart0_PutString("\n\r+------------------------------+\n\r");
 184   1        Uart0_PutString(" 1: 开启TCPIP网络功能\n\r");
 185   1        Uart0_PutString(" 2: 连接服务器\n\r");
 186   1        Uart0_PutString(" 3: 发送数据(仅发送)\n\r");
 187   1        Uart0_PutString(" 4: 发送数据并等待应答\n\r");
 188   1        Uart0_PutString(" 5: 断开与服务器之间的连接\n\r");
 189   1        Uart0_PutString(" 6: 关闭TCPIP网络功能\n\r");
 190   1        Uart0_PutString("+SwanTech>");
 191   1      }
 192          
 193          /**
 194           * @brief TCPIP协议栈配置
 195           * @author SwanTech (2011/12/12)
 196           * @param 
 197           */
 198          char SwanTech_TCPIP_Config(void)
 199          {
 200   1        //! 下面是配置过程
 201   1        //! AT
 202   1        Uart1_PutString("AT\x0D\x0A");
 203   1        if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 60000) == 0)
 204   1        {
 205   2          Uart0_PutString("SwanTech_TCPIP_Config::Uart1_GetString::failed.\n\r");
 206   2          return -1;
 207   2        }
 208   1        if(strstr(ttyBuffer, "OK") == NULL) //! 没有找到命令成功执行的结果,函数返回,否则命令执行成功
 209   1        {
 210   2          Uart0_PutString("SwanTech_TCPIP_Config::AT Command Exec failed.\n\r");
 211   2          return -1;
 212   2        }
 213   1      
 214   1        //! ATE0 [关闭回显]
 215   1        Uart1_PutString("ATE0\x0D\x0A");
 216   1        if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) == 0)
 217   1        {
 218   2          Uart0_PutString("SwanTech_TCPIP_Config::Uart1_GetString::failed.\n\r");
 219   2          return -1;
 220   2        }
 221   1        if(strstr(ttyBuffer, "OK") == NULL) //! 没有找到命令成功执行的结果,函数返回,否则命令执行成功
 222   1        {
 223   2          Uart0_PutString("SwanTech_TCPIP_Config::AT Command Exec failed.\n\r");
 224   2          return -1;
 225   2        }
 226   1      
 227   1        //! AT+CIPSHUT [防止上次使用过程中没有关闭网络功能,尝试关闭网络功能]
 228   1        //! 注意,此条命令执行时间较长,大概2秒左右才可以关闭网络功能
 229   1        //! 所以等待应答的时间较长
 230   1        Uart1_PutString("AT+CIPSHUT\x0D\x0A");
 231   1        if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) == 0)
 232   1        {
 233   2          Uart0_PutString("SwanTech_TCPIP_Config::Uart1_GetString::failed.\n\r");
 234   2          return -1;
 235   2        }
 236   1        if(strstr(ttyBuffer, "SHUT OK") == NULL) //! 没有找到命令成功执行的结果,函数返回,否则命令执行成功
 237   1        {
 238   2          Uart0_PutString("SwanTech_TCPIP_Config::关闭网络功能失败.\n\r");
 239   2          return -1;
 240   2        }
 241   1      
C51 COMPILER V9.00   SWANTECH_TCPIP_FORSIM900                                              08/12/2012 15:38:06 PAGE 5   

 242   1        //! AT+CIPMUX [设置为单连接模式]
 243   1        Uart1_PutString("AT+CIPMUX=0\x0D\x0A");
 244   1        if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) == 0)
 245   1        {
 246   2          Uart0_PutString("SwanTech_TCPIP_Config::Uart1_GetString::failed.\n\r");
 247   2          return -1;
 248   2        }
 249   1        if(strstr(ttyBuffer, "OK") == NULL) //! 没有找到命令成功执行的结果,函数返回,否则命令执行成功
 250   1        {
 251   2          Uart0_PutString("SwanTech_TCPIP_Config::设置为单连接模式失败.\n\r");
 252   2          return -1;
 253   2        }
 254   1      
 255   1        //! AT+CIPRXGET [配置为手动获取网络数据]
 256   1        Uart1_PutString("AT+CIPRXGET=1\x0D\x0A");
 257   1        if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) == 0)
 258   1        {
 259   2          Uart0_PutString("SwanTech_TCPIP_Config::Uart1_GetString::failed.\n\r");
 260   2          return -1;
 261   2        }
 262   1        if(strstr(ttyBuffer, "OK") == NULL) //! 没有找到命令成功执行的结果,函数返回,否则命令执行成功
 263   1        {
 264   2          Uart0_PutString("SwanTech_TCPIP_Config::配置为手动获取网络数据失败.\n\r");
 265   2          return -1;
 266   2        }
 267   1        
 268   1        //! AT+CIPQRCLOSE [配置为加速远程断开连接]
 269   1        Uart1_PutString("AT+CIPQRCLOSE=1\x0D\x0A");
 270   1        if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) == 0)
 271   1        {
 272   2          Uart0_PutString("SwanTech_TCPIP_Config::Uart1_GetString::failed.\n\r");
 273   2          return -1;
 274   2        }
 275   1        if(strstr(ttyBuffer, "OK") == NULL) //! 没有找到命令成功执行的结果,函数返回,否则命令执行成功
 276   1        {
 277   2          Uart0_PutString("SwanTech_TCPIP_Config::配置为加速远程断开连接失败.\n\r");
 278   2          return -1;
 279   2        }
 280   1      
 281   1        //! AT+CIPMODE [配置为非透明传输模式]
 282   1        Uart1_PutString("AT+CIPMODE=0\x0D\x0A");
 283   1        if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) == 0)
 284   1        {
 285   2          Uart0_PutString("SwanTech_TCPIP_Config::Uart1_GetString::failed.\n\r");
 286   2          return -1;
 287   2        }
 288   1        if(strstr(ttyBuffer, "OK") == NULL) //! 没有找到命令成功执行的结果,函数返回,否则命令执行成功
 289   1        {
 290   2          Uart0_PutString("SwanTech_TCPIP_Config::配置为非透明传输模式失败.\n\r");
 291   2          return -1;
 292   2        }
 293   1      
 294   1        return 0;
 295   1      }
 296          
 297          /**
 298           * @brief 连接服务器
 299           * @author SwanTech (2011/12/12)
 300           * @param 
 301           */
 302          char SwanTech_TCPIP_Connect(void)
 303          {
C51 COMPILER V9.00   SWANTECH_TCPIP_FORSIM900                                              08/12/2012 15:38:06 PAGE 6   

 304   1        //! AT+CIPSTART [准备连接服务器]
 305   1        sprintf(ttyBuffer, "AT+CIPSTART=\"TCP\",\"%s\",%s\x0D\x0A", TCPIP_SERVER_IPADDR, TCPIP_SERVER_PORT);
 306   1        Uart1_PutString(ttyBuffer);
 307   1        if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) == 0)
 308   1        {
 309   2          Uart0_PutString("SwanTech_TCPIP_Connect::Uart1_GetString::failed.\n\r");
 310   2          return -1;
 311   2        }
 312   1        if(strstr(ttyBuffer, "OK") == NULL) //! 没有找到命令成功执行的结果,函数返回,否则命令执行成功
 313   1        {
 314   2          Uart0_PutString("SwanTech_TCPIP_Connect::准备连接服务器失败.\n\r");
 315   2          return -1;
 316   2        }
 317   1      
 318   1        //! 判断是否连接已经建立
 319   1        if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) == 0)
 320   1        {
 321   2          Uart0_PutString("SwanTech_TCPIP_Connect::Uart1_GetString::failed.\n\r");
 322   2          return -1;
 323   2        }
 324   1        if(strstr(ttyBuffer, "CONNECT OK") == NULL) //! 没有找到命令成功执行的结果,函数返回,否则命令执行成功
 325   1        {
 326   2          Uart0_PutString("SwanTech_TCPIP_Connect::连接服务器失败.\n\r");
 327   2          return -1;
 328   2        }
 329   1      
 330   1        return 0;
 331   1      }
 332          
 333          /**
 334           * @brief 断开与服务器的连接
 335           * @author SwanTech (2011/12/12)
 336           * @param 
 337           */
 338          char SwanTech_TCPIP_DisConnect(void)
 339          {
 340   1        //! AT+CIPCLOSE [断开连接]
 341   1        sprintf(ttyBuffer, "AT+CIPCLOSE=1\x0D\x0A");
 342   1        Uart1_PutString(ttyBuffer);
 343   1        if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) == 0)
 344   1        {
 345   2          Uart0_PutString("SwanTech_TCPIP_DisConnect::Uart1_GetString::failed.\n\r");
 346   2          return -1;
 347   2        }
 348   1        if(strstr(ttyBuffer, "CLOSE OK") == NULL) //! 没有找到命令成功执行的结果,函数返回,否则命令执行成功
 349   1        {
 350   2          Uart0_PutString("SwanTech_TCPIP_DisConnect::断开连接失败.\n\r");
 351   2          return -1;
 352   2        }
 353   1      
 354   1        return 0;
 355   1      }
 356          
 357          /**
 358           * @brief 关闭网络功能
 359           * @author SwanTech (2011/12/12)
 360           * @param 
 361           */
 362          char SwanTech_TCPIP_NETShut(void)
 363          {
 364   1        //! AT+CIPSHUT [关闭网络功能]
 365   1        sprintf(ttyBuffer, "AT+CIPSHUT\x0D\x0A");
C51 COMPILER V9.00   SWANTECH_TCPIP_FORSIM900                                              08/12/2012 15:38:06 PAGE 7   

 366   1        Uart1_PutString(ttyBuffer);
 367   1        if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) == 0)
 368   1        {
 369   2          Uart0_PutString("SwanTech_TCPIP_NETShut::Uart1_GetString::failed.\n\r");
 370   2          return -1;
 371   2        }
 372   1        if(strstr(ttyBuffer, "SHUT OK") == NULL) //! 没有找到命令成功执行的结果,函数返回,否则命令执行成功
 373   1        {
 374   2          Uart0_PutString("SwanTech_TCPIP_NETShut::关闭网络功能失败.\n\r");
 375   2          return -1;
 376   2        }
 377   1      
 378   1        return 0;
 379   1      }
 380          
 381          /**
 382           * @brief SIM900_TCPIP数据发送函数
 383           * @author SwanTech (2011/12/12)
 384           * @param pBuffer: 数据缓冲区地址
 385           * @param nBufferLen: 数据长度
 386           */
 387          short SwanTech_TCPIP_Send(char* pBuffer, unsigned short nBufferLen)
 388          {
 389   1        //! 请求发送数据
 390   1        //! AT+CIPSEND
 391   1        sprintf(ttyBuffer, "AT+CIPSEND=%d\x0D\x0A", nBufferLen);
 392   1        Uart1_PutString(ttyBuffer);
 393   1        if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) == 0)
 394   1        {
 395   2          Uart0_PutString("SwanTech_TCPIP_Send::Uart1_GetString::failed.\n\r");
 396   2          return -1;
 397   2        }
 398   1        if(strstr(ttyBuffer, ">") == NULL) //! 没有找到命令成功执行的结果,函数返回,否则命令执行成功
 399   1        {
 400   2          Uart0_PutString("SwanTech_TCPIP_Send::请求发送数据失败.\n\r");
 401   2          return -1;
 402   2        }
 403   1      
 404   1        //! 发送数据
 405   1        Uart1_PutString(pBuffer);
 406   1        if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 1000) == 0)
 407   1        {
 408   2          Uart0_PutString("SwanTech_TCPIP_Send::Uart1_GetString::failed.\n\r");
 409   2          return -1;
 410   2        }
 411   1        if(strstr(ttyBuffer, "SEND OK") == NULL) //! 没有找到命令成功执行的结果,函数返回,否则命令执行成功
 412   1        {
 413   2          Uart0_PutString("SwanTech_TCPIP_Send::发送数据失败.\n\r");
 414   2          return -1;
 415   2        }
 416   1      
 417   1        return nBufferLen;
 418   1      }
 419          
 420          /**
 421           * @brief SIM900_TCPIP数据接收函数
 422           * @author SwanTech (2011/12/12)
 423           * @param pBuffer: 数据缓冲区地址
 424           * @param nBufferLen: 缓冲区大小
 425           */
 426          short SwanTech_TCPIP_Recv(char* pBuffer, unsigned short nBufferLen)
 427          {
C51 COMPILER V9.00   SWANTECH_TCPIP_FORSIM900                                              08/12/2012 15:38:06 PAGE 8   

 428   1        //! 判断应答数据到来标志[+CIPRXGET:1]
 429   1        if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 10000) == 0)
 430   1        {
 431   2          Uart0_PutString("SwanTech_TCPIP_Recv::Uart1_GetString::failed.\n\r");
 432   2          return -1;
 433   2        }
 434   1        if(strstr(ttyBuffer, "+CIPRXGET:1") == NULL) //! 没有找到命令成功执行的结果,函数返回,否则命令执行成功
 435   1        {
 436   2          Uart0_PutString("SwanTech_TCPIP_Recv::获取应答数据标志失败.\n\r");
 437   2          return -1;
 438   2        }
 439   1      
 440   1        //! 读取应答数据
 441   1        Uart1_PutString("AT+CIPRXGET=2,128\x0D\x0A");
 442   1        if(Uart1_GetString(ttyBuffer, TTY_MAX_BUFFER_SIZE, 30000) == 0)
 443   1        {
 444   2          Uart0_PutString("SwanTech_TCPIP_Recv::Uart1_GetString::failed.\n\r");
 445   2          return -1;
 446   2        }
 447   1        if(strstr(ttyBuffer, "OK") == NULL) //! 没有找到命令成功执行的结果,函数返回,否则命令执行成功
 448   1        {
 449   2          Uart0_PutString("SwanTech_TCPIP_Recv::读取应答数据失败.\n\r");
 450   2          return -1;
 451   2        }
 452   1      
 453   1        return 1;
 454   1      }
*** WARNING C280 IN LINE 426 OF SWANTECH_TCPIP_FORSIM900.C: 'pBuffer': unreferenced local variable
*** WARNING C280 IN LINE 426 OF SWANTECH_TCPIP_FORSIM900.C: 'nBufferLen': unreferenced local variable
 455          
 456          void SwanTech_CommandMonitor(void)
 457          {
 458   1        unsigned char bFinishConfig = 0;
 459   1        unsigned char bFinishConnect = 0;
 460   1        char buffer[3] = {0};
 461   1      
 462   1        while(1)
 463   1        {
 464   2          Uart0_GetALine(buffer, 2, 0);
 465   2          //! 如果连续收到2个0x7F,那么认为是STC-ISP正在请求下载程序
 466   2          //! 这时候启动系统复位,从ISP监控程序重新引导
 467   2          if(buffer[0] == 0x7F && buffer[1] == 0x7F)
 468   2            IAP_CONTR = 0x60;
 469   2         
 470   2          Uart0_PutString("\n\r+------------------------------+\n\r");
 471   2          if(buffer[0] == '1')
 472   2          {
 473   3            if(SwanTech_TCPIP_Config() == -1)
 474   3            {  
 475   4              bFinishConfig = 0;  //! 配置失败的标志
 476   4              Uart0_PutString("\n\r+开启TCPIP网络功能失败!\n\r");
 477   4            }
 478   3            else
 479   3            {  
 480   4              bFinishConfig = 1;  //! 配置成功的标志
 481   4              Uart0_PutString("\n\r+开启TCPIP网络功能成功!\n\r");
 482   4            }
 483   3          }
 484   2          else if(buffer[0] == '2')
 485   2          {
 486   3            if(bFinishConfig == 0) //! 如果没有开启TCPIP网络功能,那么返回失败
 487   3              Uart0_PutString("\n\r+请先开启TCPIP网络功能!\n\r");
C51 COMPILER V9.00   SWANTECH_TCPIP_FORSIM900                                              08/12/2012 15:38:06 PAGE 9   

 488   3            else if(SwanTech_TCPIP_Connect() == -1)
 489   3            { 
 490   4              bFinishConnect = 0;  //! 连接失败的标志
 491   4              Uart0_PutString("\n\r+连接服务器失败!\n\r");
 492   4            }
 493   3            else
 494   3            {
 495   4              bFinishConnect = 1;  //! 连接成功的标志
 496   4              Uart0_PutString("\n\r+连接服务器成功!\n\r");
 497   4            }
 498   3          }
 499   2          else if(buffer[0] == '3')
 500   2          {
 501   3            strcpy(tcpipBuffer, "鸿鹄电子科技. Http://swantech.taobao.com/");
 502   3            if(bFinishConnect == 0) //! 如果成功连接到服务器,那么返回失败
 503   3              Uart0_PutString("\n\r+请先连接服务器!\n\r");
 504   3            else if(SwanTech_TCPIP_Send(tcpipBuffer, strlen(tcpipBuffer)) == -1)
 505   3              Uart0_PutString("\n\r+发送数据失败!\n\r");
 506   3            else
 507   3              Uart0_PutString("\n\r+发送数据成功!\n\r");
 508   3          }
 509   2          else if(buffer[0] == '4')
 510   2          {
 511   3            strcpy(tcpipBuffer, "鸿鹄电子科技. Http://swantech.taobao.com/");
 512   3            if(bFinishConnect == 0) //! 如果成功连接到服务器,那么返回失败
 513   3              Uart0_PutString("\n\r+请先连接服务器!\n\r");
 514   3            else
 515   3            {
 516   4              if(SwanTech_TCPIP_Send(tcpipBuffer, strlen(tcpipBuffer)) == -1)
 517   4                Uart0_PutString("\n\r+发送数据失败!\n\r");
 518   4              else
 519   4                Uart0_PutString("\n\r+发送数据成功!\n\r");
 520   4      
 521   4              Uart0_PutString("\n\r+等待服务器应答......\n\r");
 522   4      
 523   4              if(SwanTech_TCPIP_Recv(tcpipBuffer, TCPIP_MAX_BUFFER_SIZE) == -1)
 524   4                Uart0_PutString("\n\r+接收应答数据失败!\n\r");
 525   4              else
 526   4                Uart0_PutString("\n\r+接收应答数据成功!\n\r");
 527   4            }
 528   3          } 
 529   2          else if(buffer[0] == '5')
 530   2          {
 531   3            if(bFinishConnect == 0) 
 532   3              Uart0_PutString("\n\r+连接还没有建立,请先建立与服务器之间的连接!\n\r");
 533   3            else if(SwanTech_TCPIP_DisConnect() == -1)
 534   3              Uart0_PutString("\n\r+断开与服务器之间的连接失败!\n\r");
 535   3            else 
 536   3              Uart0_PutString("\n\r+断开与服务器之间的连接成功!\n\r");
 537   3          }
 538   2          else if(buffer[0] == '6')
 539   2          {
 540   3            if(SwanTech_TCPIP_NETShut() == -1)
 541   3              Uart0_PutString("\n\r+关闭TCPIP网络功能失败!\n\r");
 542   3            else 
 543   3              Uart0_PutString("\n\r+关闭TCPIP网络功能成功!\n\r");
 544   3          }
 545   2      
 546   2          SwanTech_CommandDisplay();
 547   2        }
 548   1      }
 549          
C51 COMPILER V9.00   SWANTECH_TCPIP_FORSIM900                                              08/12/2012 15:38:06 PAGE 10  

 550          void main(void)
 551          {
 552   1        Uart0_Init();
 553   1        Uart1_Init();
 554   1      
 555   1        while(1)
 556   1        {
 557   2          if(RI)
 558   2          {
 559   3            RI = 0;
 560   3            SwanTech_LogoDisplay();
 561   3            SwanTech_CommandDisplay();
 562   3            break;
 563   3          }
 564   2        }
 565   1      
 566   1        while(1) SwanTech_CommandMonitor();
 567   1      
 568   1      }
 569          
 570          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2395    ----
   CONSTANT SIZE    =   2002    ----
   XDATA SIZE       =    512      48
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  2 WARNING(S),  0 ERROR(S)
