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

📄 cms.lst

📁 一个用单片机实现gprs modem发送短信的程序.里面有详细的注释,不可多得的学习程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 277   1              
 278   1              if(bon == GPRS_PWR_ON)
 279   1              {
 280   2      
 281   2                      AD0 |= 1;
 282   2                      Delay(20);
 283   2                      AD0 &= ~1;
 284   2                      Delay(15000);
 285   2                      AD0 |= 1;
 286   2                      
 287   2                      status_pwr = GPRS_PWR_ON;
 288   2              }else
 289   1              {
 290   2      
 291   2                      AD0 |= 1;
 292   2                      Delay(20);
 293   2                      AD0 &= ~1;
 294   2                      Delay(15000);
 295   2                      AD0 |= 1;
 296   2                      
 297   2                      status_pwr = GPRS_PWR_OFF;
 298   2              }
 299   1      }
 300          
 301          void SMS()
 302          {
 303   1              enum GPRS_SMS_STATUS
CX51 COMPILER V7.20   CMS                                                                  09/22/2006 14:21:05 PAGE 6   

 304   1              {
 305   1                      GPRS_SMS_INIT,     // 正在初始化
 306   1                      GPRS_SMS_IDLE,     // 初始化完毕,等待输入
 307   1                      GPRS_SMS_GET_NUM,  // 输入号码 
 308   1                      GPRS_SMS_SEND,     // 呼出
 309   1              };
 310   1              
 311   1              char strcallnum[20];
 312   1              char gprs_cmd_send_string[512];
 313   1              char gprs_cmd_recv_string[512];
 314   1              char strtemp[10];
 315   1              int  gprs_recv_msg_code;
 316   1      //      char ch;
 317   1              int  loopcnt;
 318   1              int  gprs_sms_status;
 319   1              int  bexit = 0;
 320   1      
 321   1          char *cmd;
 322   1          int loopcnt1 = 0;
 323   1              int ncount = 0; 
 324   1      
 325   1              strcallnum[0] = 0;
 326   1      
 327   1              // 打印提示信息 
 328   1              Uart1_SendString("短信功能!\n");
 329   1              Uart1_SendString("网络连接中,请等待...\n");
 330   1              
 331   1              // 系统初始化
 332   1              gprs_sms_status = GPRS_SMS_INIT;
 333   1      //      gprs_init();    
 334   1              gprs_pwr_on_off(GPRS_PWR_ON);
 335   1      
 336   1      ////////////////////////////////////////////////////////////////
 337   1      // GPRS复位     
 338   1      {
 339   2              int loopcnt;
 340   2      __RESET:
 341   2              // 延时一定时间
 342   2              Delay(15000);
 343   2              
 344   2              // 发送AT命令
 345   2              Uart0_SendString("\r");
 346   2              Uart0_SendString("AT\r");
 347   2              for(loopcnt = 0; loopcnt < 30; loopcnt++)
 348   2              {
 349   3                      // 获取结果,如果读取到OK,认为复位成功,否则重新复位
 350   3                      IntUart0Rx_cmd(gprs_cmd_recv_string);
 351   3                      if(strstr(gprs_cmd_recv_string, "OK") != 0)
 352   3                              break;
 353   3                      Delay(100);
 354   3              }
 355   2              if(loopcnt == 30)
 356   2              {
 357   3                      Delay(30000);
 358   3                      gprs_pwr_on_off(GPRS_PWR_ON);
 359   3                      goto __RESET;
 360   3              }
 361   2      }
 362   1      ///////////////////////////////////////////////////////////////
 363   1      
 364   1              Delay(15000);
 365   1              Uart0_SendString("\r"); 
CX51 COMPILER V7.20   CMS                                                                  09/22/2006 14:21:05 PAGE 7   

 366   1              Uart0_SendString("ATE0\r");
 367   1              
 368   1              // switch to pdu mode
 369   1              strcpy(gprs_cmd_send_string, "AT+CMGF=0\r");
 370   1              Uart0_SendString(gprs_cmd_send_string);
 371   1      
 372   1              strcpy(gprs_cmd_send_string, "AT+CNMI=2,1\r");
 373   1              Uart0_SendString(gprs_cmd_send_string);
 374   1              
 375   1              // 进入空闲状态,开启状态机
 376   1              gprs_sms_status = GPRS_SMS_IDLE;
 377   1              // 显示主界面   
 378   1              Uart1_SendString("输入号码,ENTER键发送,Cancel退出\n");
 379   1              while(bexit == 0)
 380   1              {
 381   2              
 382   2                if(read1 == receiver1)
 383   2                      {
 384   3                              ncount ++;
 385   3                              if(ncount >= 10000)
 386   3                              {
 387   4                                      cmd[loopcnt1++] = 0;
 388   4                                      bexit=1;
 389   4                              }
 390   3                              continue;
 391   3                      }
 392   2      
 393   2                      ncount = 0;
 394   2      
 395   2                      switch(Uart1_RX_buf[read1])
 396   2                      {
 397   3                              case '1':
 398   3                              case '2':
 399   3                              case '3':
 400   3                              case '4':
 401   3                              case '5':
 402   3                              case '6':
 403   3                              case '7':
 404   3                              case '8':
 405   3                              case '9':
 406   3                              case '0':
 407   3                                      if(gprs_sms_status == GPRS_SMS_IDLE || \
 408   3                                         gprs_sms_status == GPRS_SMS_GET_NUM)
 409   3                                      {
 410   4                                              gprs_sms_status = GPRS_SMS_GET_NUM;
 411   4                                              sprintf(strtemp, "%c", Uart1_RX_buf[read1]);
 412   4                                              Uart1_SendString(strtemp);
 413   4                                              strcat(strcallnum, strtemp);
 414   4                          read1 ++;
 415   4                                      if(read1 >= GPRS_RECV_CMD_MAX_BUF)
 416   4                                            read1 = 0;
 417   4                                      }
 418   3                                      break;
 419   3                              case 'E':
 420   3                                      // 退出
 421   3                                      gprs_sms_status = GPRS_SMS_IDLE;
 422   3                      read1 ++;
 423   3                                  if(read1 >= GPRS_RECV_CMD_MAX_BUF)
 424   3                                         read1 = 0;
 425   3                                      bexit = 1;
 426   3                                      break;
 427   3                              case 'F':
CX51 COMPILER V7.20   CMS                                                                  09/22/2006 14:21:05 PAGE 8   

 428   3                      read1 ++;
 429   3                                  if(read1 >= GPRS_RECV_CMD_MAX_BUF)
 430   3                                         read1 = 0;
 431   3         
 432   3                                      Uart1_SendString("发送短消息\n");
 433   3                                      gprs_sms_status = GPRS_SMS_SEND;
 434   3                                      // 设置服务中心号码
 435   3                                      strcpy(gprs_cmd_send_string, "AT+CSCA=\"+8613800270500\"\r");
 436   3                                      Uart0_SendString(gprs_cmd_send_string);
 437   3                                      loopcnt = 0;
 438   3                                      do
 439   3                                      {
 440   4                                              IntUart0Rx_cmd(gprs_cmd_recv_string);
 441   4                                              gprs_recv_msg_code = gprs_analyze_msg(gprs_cmd_recv_string);
 442   4                                              
 443   4                                              loopcnt ++;
 444   4                                              if(loopcnt >= 20)
 445   4                                              {
 446   5                                                      break;
 447   5                                              }
 448   4                                      }while(gprs_recv_msg_code != AT_RECV_MSG_OK && gprs_recv_msg_code != AT_RECV_MSG_ERROR);
 449   3                                      
 450   3                                      if(gprs_recv_msg_code == AT_RECV_MSG_ERROR)
 451   3                                      {
 452   4                                              Uart1_SendString("服务中心号码设置错误\n");
 453   4                                              bexit = 1;
 454   4                                              break;
 455   4                                      }else
 456   3                                      {
 457   4                                              // 发送短信
 458   4                                              SM_PARAM Src;
 459   4                                      
 460   4                                              strcpy(Src.SCA, "8613800270500");                       // 短消息服务中心号码(SMSC地址)
 461   4                                              strcpy(Src.TPA, "86");
 462   4                                              strcat(Src.TPA, strcallnum/*"8613707190506"*/);                 // 目标号码或回复号码(TP-DA或TP-RA)
 463   4                                              strcallnum[0] = 0;
 464   4                                              Src.TP_PID = 0;                 // 用户信息协议标识(TP-PID)
 465   4                                              Src.TP_DCS = 0;                 // 用户信息编码方式(TP-DCS)
 466   4                                              strcpy(Src.TP_SCTS, "04060308421002");          // 服务时间戳字符串(TP_SCTS), 接收时用到
 467   4                                              strcpy(Src.TP_UD, "Hello!");            // 原始用户信息(编码前或解码后的TP-UD)
 468   4                                              
 469   4                                              Uart1_SendString("开始发送\n");
 470   4                                              
 471   4                                              gprsSendMessage(&Src);
 472   4                                              
 473   4                                              Uart1_SendString("发送完毕\n");
 474   4                                      //      TRACE("输入号码,ENTER键发送,Cancel退出\n");
 475   4                                              gprs_sms_status = GPRS_SMS_IDLE;
 476   4                                      }
 477   3                              break;
 478   3               default:break;
 479   3                      }
 480   2                      
 481   2                      IntUart0Rx_cmd(gprs_cmd_recv_string);
 482   2                      gprs_recv_msg_code = gprs_analyze_msg(gprs_cmd_recv_string);
 483   2                      if(gprs_recv_msg_code == AT_RECV_MSG_CMTI)
 484   2                      {
 485   3                              char *pDest;
 486   3                              
 487   3                              // 收到短消息
 488   3                              Uart1_SendString("收到短消息\n");
 489   3                              
CX51 COMPILER V7.20   CMS                                                                  09/22/2006 14:21:05 PAGE 9   

 490   3                              // 解析短消息
 491   3                              pDest = strstr(gprs_cmd_recv_string, ",");
 492   3                              if(pDest != 0)
 493   3                              {
 494   4                              //      SM_PARAM Msg;
 495   4                                      
 496   4                                      pDest++;
 497   4                                      // 阅读短消息
 498   4                                      Uart1_SendString("阅读短消息\n");
 499   4                                      
 500   4                                      // Read Message
 501   4                                      sprintf(gprs_cmd_send_string, "AT+CMGR=%d\r", atoi(pDest));
 502   4                                      Uart0_SendString(gprs_cmd_send_string);
 503   4                                      // receive message
 504   4                                      do
 505   4                                      {
 506   5                                              IntUart0Rx_cmd(gprs_cmd_recv_string);
 507   5                                              gprs_recv_msg_code = gprs_analyze_msg(gprs_cmd_recv_string);
 508   5                                              if(gprs_recv_msg_code == AT_RECV_MSG_CMGR)
 509   5                                              {
 510   6                                                      SM_PARAM Msg;
 511   6                                                      
 512   6                                                      IntUart0Rx_cmd(gprs_cmd_recv_string);
 513   6                                                      IntUart0Rx_cmd(gprs_cmd_recv_string);
 514   6                                                      gprsDecodePdu(gprs_cmd_recv_string, &Msg);
 515   6                                                      
 516   6                                                      gprs_print_msg(&Msg);
 517   6                                                      break;
 518   6                                              }
 519   5                                      }while(1);
 520   4                              }
 521   3                      }
 522   2              }
 523   1      }
 524          
 525          
 526          main()
 527          {
 528   1        receiver0=0;
 529   1        receiver1=0;
 530   1        read0=0;
 531   1        read1=0;
 532   1      
 533   1        Init_UART0();
 534   1        Init_UART1();
 535   1      
 536   1        EA=1;                //使能所有中断
 537   1      
 538   1        SMS();
 539   1      }
 540          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2599    ----
   CONSTANT SIZE    =    393    ----
   XDATA SIZE       =   2058    2061
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
   EDATA SIZE       =   ----    ----
CX51 COMPILER V7.20   CMS                                                                  09/22/2006 14:21:05 PAGE 10  

   HDATA SIZE       =   ----    ----
   XDATA CONST SIZE =   ----    ----
   FAR CONST SIZE   =   ----    ----
END OF MODULE INFORMATION.


CX51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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