当前位置: 代码迷 >> 综合 >> gps gprs sim300 发短信
  详细解决方案

gps gprs sim300 发短信

热度:66   发布时间:2023-12-15 03:00:04



/*************************************************************** 

  GPS GPRS 发短信 

  博客:www.guooge.com 

  作者:lurker 

  QQ:313919848 

  GPRS: sim300 工业模块 

  GPS : GR-87  

  单片机: STC12C5A60S2 

****************************************************************/  

#include <STC12C5A60S2.H>  

#include <absacc.h>  

#include <intrins.h>  

  

  

sbit led=P0^2;  

#define FOSC 11059200   

#define BAUD 9600   

#define uint unsigned int  

#define uchar unsigned char  

/************************************************ 

函数声明 

************************************************/  

Send_Str(uchar * str,uint len);  

Send_Char(uchar ch);  

void Send_GPS();  

/************************************************ 

               GPRS 用 

*************************************************/  

  

uchar code PhoneCall[]={ "ATD15265316871;"};//打电话数据  改为你要打电话的号码  

uchar code TxtMode[9]={ "AT+CMGF=1"}; //AT+CMGF=1短信模式设置Text模式;AT+CMGF=0PDU模式  

uchar code MessCom_PhoneNum[21]={ "AT+CMGS=\"15265316871\""};//发送短信AT指令头+接收短信号码    改为你要发送短信的目标手机的号码  

uchar code CenterNum[24]={ "AT+CSCA=\"+8613800531500\""};//24个数(短信息中心号码设置)格式:\位转义字符,将""转移成字符  此号码不要改这是中心号码  

uchar code RecNum[11]={ "15265316871"};//11个数(短信接收手机号码设置) 改为接受短信的号码  

uchar code umkk[]={ "AT+CLPORT=\"UDP\",\"8002\""};  

uchar code sendtext[]={ "AT+CIPSEND"};  

uchar code CloseGprs []={ "AT+CIPCLOSE"};  

uchar code gprs_server []={ "AT+CIPSTART=\"UDP\",\"123.232.109.4\",\"8002\""};  

uchar code AT[2]={ "AT"};     //联机命令  

uchar code Enter[1]={0x0D};//回车键"\r"  

  

/********************************************** 

定义GPS接收标志 

***************************************************/  

unsigned char rev_data=0;//数据缓存  

unsigned char Num_comma=0;//逗号纪录数  

unsigned char read_start=0;//开始接收数据标志位  

unsigned int jdindex=0;wdindex=0,jd,wd;//索引  

unsigned char wd_buf[10]={ "0111111111"};//纬度  

unsigned char jd_buf[12]={ "022222222222"};//经度  

unsigned rev_flag=0,flag1=0,flag2=0,flag3=0,flag4=0,flag5=0;//接收标志位:GPGGA  

/******************************************************** 

gps标志初始话 

********************************************************/  

void init_data()  

{  

  

    rev_flag=0,flag1=0,flag2=0,flag3=0,flag4=0,flag5=0,read_start=0;  

    jdindex=0;wdindex=0,jd=0,wd=0;  

    Num_comma=0;      

}  

/******************************************************** 

                延时函数 

*********************************************************/  

delay_Xms(uint t)//延时函数  

{  

    uint i,j;  

    for(i=t;i>0;i--)  

        for(j=920;j>0;j--);  

}  

  

  

  

/******************************************************** 

                    串口中断程序 

*********************************************************/  

void recv_serial_one() interrupt 4 using 1 //串口1中断函数  

{  

    uchar RecvChar;  

    if (RI == 1)  

    {    

        RI = 0;  

        RecvChar = SBUF;  

        Send_Char(RecvChar);  

    }  

    else  

    {  

        TI = 0;  

    }  

}  

  

void Uart2() interrupt 8 using 1  //串口2中断函数  

{   

   uchar rev_data;  

    if ((S2CON & 0x01) == 1)  

    {  

        S2CON &= 0xFE;  

      

            rev_data=S2BUF;  

            if(rev_data=='$')  

            flag1=1;  

            if(rev_data=='G'&&flag1==1)  

            flag2=1;  

            if(rev_data=='P'&&flag1==1)  

            flag3=1;  

            if(rev_data=='R'&&flag1==1)  

            flag4=1;  

            if(rev_data=='M'&&flag1==1)  

            flag5=1;  

            if(rev_data=='C'&&flag1==1)  

            read_start=1;  

            //开始接收  

            if(read_start==1)  

            {  

                if(rev_data==',')  

                {  

                    Num_comma++;  

                }  

                if(Num_comma==3)  

                {  

                    wd_buf[wdindex]=rev_data;  

                    S2BUF=wd_buf[wdindex];  

                    wdindex++;    

                }  

                if(Num_comma==5)  

                {  

                    jd_buf[jdindex]=rev_data;  

                    S2BUF=jd_buf[jdindex];  

                    jdindex++;  

                }  

  

                if(Num_comma==6)  

                {  

                    init_data();  

                    IE2 = 0x00;   

                    led=1;  

                    Send_GPS();           

                }  

                  

            }  

  

  

  

  

    }     

}   

  

  

/*********串口1发送程序********************* 

bb为数据缓冲区,count为要发送的字节数 

******************************************/  

void sendSer_one(uchar *bb,uchar count)  

 {  

  uchar i;  

  TI=0;  

  for(i=0;i<count;i++)  

  {   

    TI=0;  

    SBUF=bb[i];  

    while(!TI) ;  

      

  }  

}  

/********************************************************** 

 

    串口初始化 

 

***********************************************************/  

void serial_port_one_initial()//初始化串口 1  

{  

  EA=0;  

  ES=0;  

  TMOD=0x20;  

  TH1=0xFD;// 波特率9600 11.0592M  

  TL1=0xFD;  

  PCON=0x00;  

  SCON=0x50;//方式1,10位(1起始8数据1停止),允许接受  

  TR1=0x01;//启动定时器  

  EA=1;  

  ES=1;  

}  

 void serial_port_two_initial()//串口2初始化  

 {  

    EA=0;  

    S2CON = 0x5a;               //8位可变波特率 (无校验位)   

    BRT = -(FOSC/32/BAUD);      //设置独立波特率发生器的重载初值   

    AUXR = 0x14;                //独立波特率发生器工作在1T模式   

    IE2 = 0x01;                 //使能串口2中断   

    EA = 1;                     //开总中断   

 }  

  

/*********************************************************** 

           GPRS 程序 

*************************************************************/  

  

Send_Char(uchar ch)//串口1发送单个字符  

{  

    ES = 0;  

    SBUF = ch; //送入缓冲区  

    while(TI == 0); //等待发送完毕  

    TI = 0; //软件清零  

    ES = 1;  

}  

  

  

Send_Str(uchar * str,uint len)//串口1发送字符串,调用Send_Char() len字符串长度  

{  

    while(len--)  

    {  

        Send_Char(*str++);  

    }  

  

}  

  

/**********************GSM/GPRS模块程序**********************************/  

void GSM_AT()   //发"AT"的函数    

{     

     Send_Str(AT,2);  

     Send_Char('\r'); //以回车作为结束符号,手机才能识别  

     ES=1;  

     delay_Xms(100); //延时  

}  

  

/***************************短信**********************************/  

void GSM_TXT() //发送AT+cmgf=1     设置短信模式Text  

{     

     Send_Str(TxtMode,9);  

     Send_Char('\r');  

     ES=1;  

     delay_Xms(1000);   

}  

void GSM_CMGS()  //发送AT+cmgs=       (发短信的命令)  

{     

     Send_Str(MessCom_PhoneNum,21);  

     Send_Char('\r');  

     ES=1;  

     delay_Xms(100);     

}  

 //设置短信接收手机号码  

void Mess_PhoneNum()//设置短信接收手机号码  

{  

    Send_Str(RecNum,11);  

    delay_Xms(100);  

}  

//设定中心号码  

void center_num()  //发中心号码  

{  

    Send_Str(CenterNum,24);  

    Send_Char('\r');  

    delay_Xms(100);  

}  

//发送短信息函数  

void Text_message()      短信内容message[]  

{  

  

    Send_Char(0x1a);  //发送结束标志位(CTRL+Z  )  

    delay_Xms(1000);  

}     

  

/**********************发送GPS数据*********************************/  

void Send_GPS()  

{    

    delay_Xms(10);  

    GSM_AT();       //发送AT  

    delay_Xms(100);  

    led=1;     

        center_num();//发送短信息中心号码  

    GSM_TXT();//设置为Text模式  

    delay_Xms(1000);  

    center_num();//发送短信息中心号码  

    GSM_TXT();//设置为Text模式  

    GSM_AT();       //发送AT  

    delay_Xms(10);  

   //发送短信息,此程序上电自动发送短信到指定手机 只发一次。  

    GSM_CMGS();//发短信命令+接收短信号码  

  

    for(wdindex=1;wdindex<10;wdindex++)  

    {  

        Send_Char(wd_buf[wdindex]);  

    }  

    for(jdindex=0;jdindex<12;jdindex++)  

    {  

        Send_Char(jd_buf[jdindex]);  

    }  

    Send_Char(0x1a);  //发送结束标志位(CTRL+Z  )  

    delay_Xms(1000);  

    IE2 = 0x01;   

    delay_Xms(1000);  

    led=0;    

}  

  

void Send_Gprs()  

{  

    Send_Str(umkk,23);//指定本地端口  

    Send_Char('\r');   

    delay_Xms(1000);  

  

    Send_Str(gprs_server,40);  

    Send_Char('\r');      

    delay_Xms(1000);  

  

    Send_Str(sendtext,10);  

    Send_Char('\r');      

    delay_Xms(1000);  

  

    for(wdindex=1;wdindex<10;wdindex++)  

    {  

        Send_Char(wd_buf[wdindex]);  

    }  

    for(jdindex=0;jdindex<12;jdindex++)  

    {  

        Send_Char(jd_buf[jdindex]);  

    }  

    Send_Char(0x1a);  //发送结束标志位(CTRL+Z  )  

    delay_Xms(500);   

    Send_Str(CloseGprs,11);  

    Send_Char('\r');   

    delay_Xms(500);  

}  

  

void main()  //主函数  

{  

      

    led=0;  

    serial_port_one_initial();//初始化串  

    serial_port_two_initial();//初始化串口2  

    IE2 = 0x00;   

    Send_GPS();  

    Send_Gprs();  

    led=1;  

    while(1)  

    {  

          

    }     

      

}  

转载自 http://guooge.com/archives/226.html

  相关解决方案