• 大小: 18KB
    文件类型: .c
    金币: 2
    下载: 0 次
    发布日期: 2021-05-05
  • 语言: 其他
  • 标签: SIM7600  LBS  

资源简介

SIM7600单片机C测试代码,含基站定位,2G3G4G全网通,项目成功应用

资源截图

代码片段和文件信息

/*代码说明:用SIM900A或SIM2000C的GPRS服务*/
/*SIM900A;SIM2000C代码调用相同,程序会自动区分模块*/
#include “sim900a.h“
#include 
#include 
#include 
#include “delay.h“
#include “hal.h“
#include 
volatile unsigned long Sim900a_TimerOut;//全局变量,SIM900A超时变量,ms单位

volatile unsigned char TcpMuxConnectState[5];
volatile unsigned char Sim900aState=0;//标记初始化状态,Bit0~Bit7,LBS启动
volatile unsigned char Sim900a_Rcv_Buf[SIM900_MAX_LEN];//SIM900A数据接收缓存
volatile unsigned int Sim900aRdPt=0Sim900aWrpt=0;//串口数据读写指针
volatile unsigned char cops_mode=0xff;//运营商名称,默认非CDMA2000
unsigned char g_ucSMSCNumber[14];
void (*PutsData2Sim900A)(unsigned char cmd[]);//函数指针,指向底层字符串发送函数。在系统初始化时需要指向底层硬件发送函数。
void (*PutcData2Sim900A)(unsigned char cmd);//指向底层单字符发送函数
unsigned char TempParseBuf[SIM900_MAX_LEN];
//发送命令到SIM900A
//参数:cmd--要发送的命令flag--期望得到的回复timerout--超时时长ms单位
unsigned char SendCmd2SIM900A(unsigned char cmd[]unsigned char flag[]unsigned int timerout)
{
//unsigned char buf[SIM900_MAX_LEN];
unsigned char len=0;
char* pointer;
Sim900aRdPt=Sim900aWrpt=0;//命令发送之前清除读写指针
Sim900a_TimerOut=timerout;
        if(PutsData2Sim900A!=0x00)
PutsData2Sim900A(cmd);        
else return FALSE;
        memset(TempParseBuf0SIM900_MAX_LEN);
if(flag==0)return 1;

while(Sim900a_TimerOut)
{
if(Sim900aWrpt!=Sim900aRdPt)//如果有新数据
{
TempParseBuf[len++]=Sim900a_Rcv_Buf[Sim900aRdPt++];
if(Sim900aRdPt>=SIM900_MAX_LEN)Sim900aRdPt=0;
}
if(len>2)//前后各有一个回车换行,所以至少要有4个数据
{
                  pointer=strstr(TempParseBuf“ERROR“);//先找ERROR
                  if(pointer!=NULL)//返回字符串包含了ERROR,此时也需要退出
                  {
                       return 0;
                  }
                  else 
                  {
                        pointer=strstr(TempParseBufflag);//查找匹配字符串
if(pointer!=NULL)//找到了匹配的返回字符串
{
return 1;
}
                  }
}
}
return 0;
}
unsigned char GetSMSCNumber(unsigned char Number[])
{
   unsigned int len=0;
   char* pointer;
   unsigned int i=0;
   memset(TempParseBuf0SIM900_MAX_LEN);
   Sim900aRdPt=Sim900aWrpt=0;//命令发送之前清除读写指针
   if(PutsData2Sim900A!=0x00)
PutsData2Sim900A(“AT+CSCA?\r\n“);
   else return FALSE;
   len=0;
   Sim900a_TimerOut=1000;
   while(Sim900a_TimerOut>0)//超时时间未到
   {
      if(Sim900aWrpt!=Sim900aRdPt)//如果有新数据
        {
                TempParseBuf[len++]=Sim900a_Rcv_Buf[Sim900aRdPt++];
                if(Sim900aRdPt>=SIM900_MAX_LEN)Sim900aRdPt=0;
        }
  if(len>=2)//前后各有一个回车换行,所以至少要有4个数据
  {
if(TempParseBuf[len-2]==‘O‘&&TempParseBuf[len-1]==‘K‘)
{
pointer=strstr(TempParseBuf“+CSCA“);
if(pointer!=NULL)//找到了匹配的返回字符串
{
   for(i=0;i<13;i++)Number[i]=*(pointer+9+i);
   Number[13]=‘\0‘;
   return 1;
}
else
{return 0;}//未找到匹配的字符串
}
      }
   }
   return 0;
}
//获取SIM卡类型
//0~11
//0xff获取失败
unsigned char GetIMSI()
{
  unsigned int len=0;
  unsigned char str[20];
   uns

评论

共有 条评论