📄 at.lst
字号:
657
658 //********************************************************************************************************
-***************
659 //函数作用:挂机
660 //参数说明:
661 //注意事项:
662 //返回说明:如果等到 返回1
663 //********************************************************************************************************
-***************
664 uchar ATHangup(void)
665 {
666 1 if(at_send_command_waitok(AT_CMD_HANGUP,""))
667 1 {
668 2 ring=0;
669 2 calling=0;
670 2 str_copy(clip_no,"???????????");
671 2 return 1;
672 2 }
673 1 return 0;
674 1 }
675
676 //********************************************************************************************************
-***************
677 //函数作用:切换音频通道
678 //参数说明:
679 //注意事项:
680 //返回说明:如果等到 返回1
681 //********************************************************************************************************
-***************
682 uchar ATSetAC(uchar no)
683 {
684 1 uchar no_buf[2]="1";
685 1
686 1 no_buf[0]=no;
687 1 return at_send_command_waitok(AT_CMD_SWITCHAUDIO,no_buf);
688 1 }
689
690 //********************************************************************************************************
-***************
691 //函数作用:MIC增益
692 //参数说明:no--MIC号 gain--增益数量字符串 0-15
693 //注意事项:
694 //返回说明:如果等到 返回1
695 //********************************************************************************************************
-***************
696 uchar ATSetMic(uchar no, uchar *gain)
697 {
698 1 uchar buf[]="0,10";
699 1 buf[0]=no;
700 1 str_copy(&buf[2],gain);
701 1 return at_send_command_waitok(AT_CMD_MIC,buf);
702 1 }
703
704 //********************************************************************************************************
-***************
705 //函数作用:初始化
706 //参数说明:
C51 COMPILER V7.20 AT 11/03/2007 17:08:50 PAGE 13
707 //注意事项:
708 //返回说明:返回是否有错误 如果有错误送复位标志
709 //********************************************************************************************************
-***************
710 void ATInit(void)
711 {
712 1 uchar wait_time;
713 1
714 1 //清标志
715 1 at_reset=0;//需要复位
716 1 simok=0;//sim卡
717 1 loginok=0;//登陆成功
718 1 smsin=0;//收到短消息
719 1 ring=0;//来电
720 1 calling=0;//是否通话状态
721 1 str_copy(clip_no,"???????????");
722 1
723 1 //1.上电并初始化端口
724 1 print_line("AT重新上电");
725 1 AT_POWER_CTRL=0;
726 1 delay(2);//等待2秒
727 1 AT_PORTINIT(AT_BAUDRATE);//端口初始化
728 1 AT_FLUSH();
729 1 AT_POWER_CTRL=1;
730 1
731 1 //2.等待READY
732 1 print_line("AT等待RDY");
733 1 wait_time=20;//等待10秒
734 1 while(!at_wait_ack(30,AT_ACK_OK))
735 1 {
736 2 at_send_command("","");
737 2 if(--wait_time==0)goto error;
738 2 }
739 1
740 1 //3.等待SIM卡检测
741 1 print_line("SIM卡检测");
742 1 wait_time=100;//等待10秒
743 1 while(!simok)
744 1 {
745 2 ATAnalyse();
746 2 mdelay(100);
747 2 LED_CTRL=!LED_CTRL;
748 2 if(--wait_time==0)goto error;
749 2 }
750 1
751 1 //4.等待登陆网络
752 1 print_line("AT登录网络");
753 1 if(!at_send_command_waitok(AT_CMD_DISECHO,""))goto error;//关闭命令回显
754 1 if(!at_send_command_waitok(AT_CMD_CREG,""))goto error;//主动提供网络注册信息
755 1 at_send_command("+COPS=","4,0,\"CHINA MOBILE\"");//手动注册中国移动 如果不成功再自动注册
756 1 wait_time=120;//等待120秒
757 1 while(!loginok)
758 1 {
759 2 ATAnalyse();
760 2 delay(1);
761 2 LED_CTRL=!LED_CTRL;
762 2 if(--wait_time==0)goto error;
763 2 }
764 1
765 1 //5.初始化AT命令
766 1 print_line("AT设置命令");
767 1 if(!at_send_command_waitok(AT_CMD_SMSPDU,""))goto error;//短消息PDU模式
C51 COMPILER V7.20 AT 11/03/2007 17:08:50 PAGE 14
768 1 if(!at_send_command_waitok(AT_CMD_SMSTOCOMM,""))goto error;//短消息直接从串口出
769 1 if(!at_send_command_waitok(AT_CMD_GSMCHARSET,""))goto error;//设置GSM字符集
770 1 if(!at_send_command_waitok(AT_CMD_TCPIPRECEIVEHINT,""))goto error;//设置TCP/IP数据包接收提示
771 1 if(!at_send_command_waitok(AT_CMD_TCPIPSENDHINT,""))goto error;//关闭TCPIP数据发送时的 "> " 提示
772 1 if(!at_send_command_waitok(AT_CMD_FIXLOCALPORT,""))goto error;//取消固定本地端口号
773 1 if(!at_send_command_waitok("+CLIP=1",""))goto error;//开来电显示
774 1 if(!ATSetAC('1'))goto error;//切换到免提通道 提供振铃
775 1 if(!ATSetMic('0',"12"))goto error;//调节MIC增益
776 1 if(!ATSetMic('1',"12"))goto error;//调节MIC增益
777 1
778 1 //6.等待可以发送短消息了
779 1 //print_line("短信初始化");
780 1 //wait_time=120;//等待120秒
781 1 //while(!at_wait_ack(100,AT_ACK_OK))
782 1 //{
783 1 // at_send_command(AT_CMD_SMSCENTERNO,"?");
784 1 // if(--wait_time==0)goto error;
785 1 //}
786 1 //delay(5);
787 1
788 1 //7.正确返回
789 1 return;
790 1
791 1
792 1 error:
793 1 print_line("失败");
794 1 at_reset=1;
795 1 }
796
797
798
799 //********************************************************************************************************
-***************
800 //函数作用:AT处理函数
801 //参数说明:
802 //注意事项:
803 //返回说明:
804 //********************************************************************************************************
-***************
805 void ATProcess(void)
806 {
807 1 //初始化
808 1 if(at_reset)ATInit();
809 1
810 1 //接收数据分析
811 1 ATAnalyse();
812 1
813 1 //短信处理
814 1 if(smsin)
815 1 {
816 2 smsin=0;
817 2 print_line("GET A SMS");
818 2
819 2 //判断是否是自定义的有效命令
820 2 if(sms_coding==8 && str_compare(at_receive_buffer,"4F60572854EA91CC"))
821 2 {
822 3 print_line("位置查询短信");
823 3 if(!gis_search(at_receive_buffer,gps_longti(),gps_lati()))//查找地图
824 3 {
825 4 ATSendSMS(sms_no,at_receive_buffer,8);//发送应答
826 4 print_line("查询成功");
827 4 }
C51 COMPILER V7.20 AT 11/03/2007 17:08:50 PAGE 15
828 3 else
829 3 {
830 4 print_line("查询失败");
831 4 }
832 3 }
833 2
834 2 }
835 1 //来电处理
836 1 if(ring)
837 1 {
838 2 print_line("GET A CALL");
839 2
840 2 //判断是否是家人和朋友的号码
841 2 if(str_comprise(clip_no,"13389937509"))
842 2 {
843 3 ATAnswer();
844 3 print_line("接听监听电话");
845 3 }
846 2 else if(str_comprise(clip_no,"13332020931"))
847 2 {
848 3 ATAnswer();
849 3 print_line("接听监听电话");
850 3 }
851 2 else
852 2 {
853 3 ATHangup();mdelay(100);ATHangup();
854 3 print_line("拒绝接听");
855 3 }
856 2 }
857 1 }
858
859
860
861
862
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 3878 ----
CONSTANT SIZE = 491 ----
XDATA SIZE = 409 97
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 6 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -