//----------------------------------------------
//本文件为存放子函数区域
//子函数功能为标准发送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