📄 cms.lst
字号:
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 + -