//---------------------------------------------- //本文件为存放子函数区域 //子函数功能为标准发送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);} for(i=0;i<sizeof(TC_FSNR)-1;i++) {send_uart(TC_FSNR2);} for(i=0;i<sizeof(TC_FSNR)-1;i++) {send_uart(TC_FSNR3);} 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);} send_uart(0X22); for(i=0;i<sizeof(TC_MDSJ2)-1;i++) {send_uart(TC_MDSJ2);} 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);} send_uart(0X22); for(i=0;i<sizeof(TC_ZXH2)-1;i++) {send_uart(TC_ZXH2);} 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);} 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);} 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
|