注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
lw209的个人空间 https://home.eeworld.com.cn/space-uid-345120.html [收藏] [复制] [分享] [RSS]
日志

gprs的程序

已有 1990 次阅读2011-11-27 17:50

//----------------------------------------------
//本文件为存放子函数区域
//子函数功能为标准发送AT指令函数
//------------------------------------------------
#ifndef __gsm_H__
#define __gsm_H__
#include<reg52.h>
#include<absacc.h>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
#define RST      0X01   
#define CMGF     0X02
#define CMGD     0X03
#define CREG     0X04
#define CMGR     0X05
#define CMGS     0X06
#define CSCA     0X07
#define ATDAT    0X08
#define TC35RET  0X00
uchar TC35_CON;
uchar read_flag;
uchar i_TC35_RECE;
uchar i_receive,TC35_RE[40],TC35_MAX,i_TC35;
///////需要改动的地方//////其他省份请自己百度
下/////////////////////////////////////////////
uchar code TC_MDSJ2[]={"15973195914"};        //目的手机地址,
uchar code TC_ZXH2[]={"+8613800731500"};      //湖南省长沙市移动本地中心
//uchar code TC_ZXH2[]={"+8613800220500"};      //联通本地中心号?
////////
其他地方不要乱动////////////////////////////////////////////////////////
uchar code TC_MDSJ1[]={"AT+CMGS="};             //目的手机地址,
uchar code TC_ZXH1[]={"AT+CSCA="};              //本地中心号。
uchar code TC_FSNR[]={"E:34.6\r"};             //发送短信内容。
uchar code TC_FSNR2[]={"S:66.6\r"};             //发送短信内容。
uchar code TC_FSNR3[]={"PULSE:67\r"};             //发送短信内容。
uchar code TC_WLZT[]={"AT+CREG?"};             //网络状态查询
uchar code TC_MSXZ[]={"AT+CMGF=1"};             //发送模式选择。
uchar code TC_DQML[]={"AT+CMGR=1"};             //短信读取命令。
uchar code TC_SCML[]={"AT+CMGD=1"};             //短信删除命令。
uchar code TC_ATF[]={"AT&F"};                 //格式化命令。
uchar code TC_ATE0[]={"ATE0"};                 //清除回显命令
uchar code TC_SMS_1[]={"AT+CNMI=2,1,0;"};     //短信通知命令
void delay_GSM(uint i)
{ unsigned int i_delay,j_delay;
 for(i_delay=0;i_delay<i;i_delay++)
 {for(j_delay=0;j_delay<100;j_delay++){;}}
}
void delay_50ms(unsigned int t)  //延时程序
 {
 unsigned int j;
  for(;t>0;t--)
  for(j=2000;j>0;j--);
 }
void SerialSendChars(char *str) //串口连续发送字符串,遇到终止符\0停止
 {
  while(*str!='\0')
  {
   SBUF=*str;
   while(!TI);  //等待发送完成信号
   TI=0;
   str++;
  } 
 }        
//向串口发送一个字符
void send_uart( char a_s)
         {  
      SBUF=a_s;       
            while (TI!=1){;}
               TI= 0 ;      
          }
//串口接收中断函数
void serial () interrupt 4
 {
      if (RI)
         { 
          RI = 0 ;
         i_receive=SBUF;
         TC35_RE[i_TC35_RECE++]=i_receive;
             if(i_TC35_RECE>TC35_MAX)   {TC35_MAX=i_TC35_RECE;}
          }
 }
void ATNAME()
 {//I AM OK
  uchar i;
  for(i=0;i<sizeof(TC_FSNR)-1;i++)
      {send_uart(TC_FSNR[i]);}
  for(i=0;i<sizeof(TC_FSNR)-1;i++)
      {send_uart(TC_FSNR2[i]);}
  for(i=0;i<sizeof(TC_FSNR)-1;i++)
      {send_uart(TC_FSNR3[i]);}
  delay_GSM(400);
  send_uart(0X1A);
  send_uart(0X0D);
  send_uart(0X0A);
  TC35_CON=ATDAT;
 }
//写目的手机的
void AT_CMGS()
 {//AT+CMGS=15874811064
  uchar i;
  for(i=0;i<sizeof(TC_MDSJ1)-1;i++)
  {send_uart(TC_MDSJ1[i]);}
  send_uart(0X22);
  for(i=0;i<sizeof(TC_MDSJ2)-1;i++)
  {send_uart(TC_MDSJ2[i]);}
  send_uart(0X22);
  send_uart(0X0D);
  send_uart(0X0A);
  TC35_CON=CMGS;
 }
//写信息中心号
void AT_CSCA()
 {//AT+CSCA=+8613800731500
  uchar i;
  for(i=0;i<sizeof(TC_ZXH1)-1;i++)
  {send_uart(TC_ZXH1[i]);}
  send_uart(0X22);
  for(i=0;i<sizeof(TC_ZXH2)-1;i++)
  {send_uart(TC_ZXH2[i]);}   
  send_uart(0X22);   
  send_uart(0X0D);
  send_uart(0X0A);
  TC35_CON=CSCA;
 }
//AT接收格式指令
void AT_CMGF()
 {//AT+CMGF=1
  uchar i;
  for(i=0;i<sizeof(TC_MSXZ)-1;i++)
  {send_uart(TC_MSXZ[i]);}
  send_uart(0X0D);
  send_uart(0X0D);
  send_uart(0X0A);
  TC35_CON=CMGF;
 }
void ATE0()
 {
  uchar i;
  for(i=0;i<sizeof(TC_ATE0)-1;i++)
      {send_uart(TC_ATE0[i]);}
  send_uart(0X0D);
  send_uart(0X0A);
  TC35_CON=RST;
 } 
void SEND_MESSAGE()
 {
  
   if(TC35_CON==RST)
   {
               TC35_CON=TC35RET;
      delay_GSM(10); 
      AT_CMGF();
   }
   else if(TC35_CON==CMGF)
   {
   TC35_CON=TC35RET;
    delay_GSM(10); 
    AT_CSCA();
   }//填写信息中心号
   else if(TC35_CON==CSCA)
   {
    delay_GSM(10);
    TC35_CON=TC35RET;
    delay_GSM(10);
    AT_CMGS();
      }
   //填写发送内容
   else if(TC35_CON==CMGS)
   {
    delay_GSM(10);
    TC35_CON=TC35RET; 
    delay_GSM(10);
    ATNAME();
   }
 //发送完毕返回继续扫描接收
   else if(TC35_CON==ATDAT)
   {
   delay_GSM(10);
   for(i_TC35=0;i_TC35<=29;i_TC35++)
   {TC35_RE[i_TC35]=0;}
   i_TC35_RECE=0;
   TC35_MAX=0;
   delay_GSM(100);
   SerialSendChars("ATD15874811064;\r");  //拔打号码
10086 
   delay_50ms(1000); 
   SerialSendChars("ATH\r");  //挂断电话
   while(1);
  // AT_CMGS();
   }   
 //复位接收组
 for(i_TC35=0;i_TC35<=39;i_TC35++)
 {TC35_RE[i_TC35]=0;}
 i_TC35_RECE=0;
 TC35_MAX=0;
 
}
 #endif
 
评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章