您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 51控制SIM900发送短信程序
/************************************************************程序说明:本程序运行后如果gprs模块找到服务商信号可实现接打电话发送短信等功能*************************************************************/#includeREG51.H#includestring.H#defineucharunsignedchar#defineuintunsignedint//以下是板子上LED的配置,把Px_x改成自己对应的脚。//以下是你的51单片机的晶振大小sbitP10=P1^0;sbitP11=P1^1;sbitP12=P1^2;sbitP13=P1^3;sbitP14=P1^4;sbitP15=P1^5;#defineFOSC_110592M//#defineFOSC_12M//以下是开机后拨打的手机号,改成自己想要大的号码即可。ucharnum[]=ATD10086;\r\n;//以下是GSM模块返回数据ucharrec_data[50];ucharrec_num;//注意,无论接收到信号还是发送完信号,都会进中断服务程序的/*初始化程序(必须使用,否则无法收发),次程序将会使用定时器1*/voidSerialInti()//初始化程序(必须使用,否则无法收发){TMOD=0x20;//定时器1操作模式2:8位自动重载定时器#ifdefFOSC_12M//在这里根据晶振大小设置不同的数值初始化串口TH1=0xf3;//装入初值,波特率2400TL1=0xf3;#elseTH1=0xfd;//装入初值,波特率9600TL1=0xfd;#endif//endofSOC_12MTR1=1;//打开定时器SM0=0;//设置串行通讯工作模式,(10为一部发送,波特率可变,由定时器1的溢出率控制)SM1=1;//(同上)在此模式下,定时器溢出一次就发送一个位的数据REN=1;//串行接收允许位(要先设置sm0sm1再开串行允许)EA=1;//开总中断ES=1;//开串行口中断}/*串行通讯中断,收发完成将进入该中断*///如:+CMTI:SM,2voidSerial_interrupt()interrupt4{uchartemp;temp=SBUF;rec_data[rec_num++]=temp;if(rec_num=50)rec_num=0;else;RI=0;//接收中断信号清零,表示将继续接收}//串行口连续发送char型数组,遇到终止号/0将停止voidUart1Sends(uchar*str){while(*str!='\0'){SBUF=*str;while(!TI);//等待发送完成信号(TI=1)出现TI=0;str++;}}voidUart1BYTE(uchartemp){SBUF=temp;while(!TI);//等待发送完成信号(TI=1)出现TI=0;}ucharhand(uchar*ptr){if(strstr(rec_data,ptr)!=NULL)return1;elsereturn0;}voidclear_rec_data(){uchari;for(i=0;istrlen(rec_data);i++){rec_data[i]='0';}rec_num=0;}//延时函数大概是1s钟,不过延时大的话不准...voidDelaySec(intsec){uinti,j=0;for(i=0;isec;i++){for(j=0;j65535;j++){}}}voidmain(){uchari=0;SerialInti();//Uart1Sends(num);//建议在单片机控制GSM模块前,加上两条AT指令,用来同步模块与单片机的波特率Uart1Sends(ATI\r\n);//握手while(!hand(OK)){clear_rec_data();i++;Uart1Sends(ATI\r\n);//DelaySec(1);//延时if(i=5){break;//return;}else;}P10=0;clear_rec_data();//删除存储的GSM模块返回的数据,以便于以后继续判断DelaySec(1);//延时Uart1Sends(AT+CSQ\r\n);//信号质量DelaySec(1);//延时i=0;while(!hand(OK))//检测此条指令GSM模块是否执行OK{clear_rec_data();i++;Uart1Sends(AT+CSQ\r\n);//DelaySec(1);//延时if(i=5){break;//return;}else;}P11=0;clear_rec_data();DelaySec(1);//延时Uart1Sends(AT+CPIN?\r\n);//查看是否读到手机卡DelaySec(1);//延时i=0;while(!hand(READY))//检测SIM模块是否收到SIM卡READY{clear_rec_data();i++;Uart1Sends(AT+CPIN?\r\n);//是否注册到网络DelaySec(1);//延时if(i=5){break;//return;}else;}P12=0;Uart1Sends(AT+COPS?\r\n);//是否注册到网络DelaySec(1);//延时i=0;while(!hand(CHINA))//检测是否收到模块返回的CHINA{clear_rec_data();i++;Uart1Sends(AT+COPS?\r\n);//是否注册到网络DelaySec(1);//延时if(i=5){break;//return;}else;}P13=0;clear_rec_data();DelaySec(1);//延时//以下是发送英文短信短信Uart1Sends(AT+CMMI=2,1\r\n);//开回显DelaySec(1);//延时Uart1Sends(AT+CMGF=1\r\n);//方式1DelaySec(1);//延时Uart1Sends(AT+CMGS=\10086\\r\n);//此处修改短信接收方电话号DelaySec(1);//延时Uart1Sends(ye);//此处修改短信内容DelaySec(1);//延时Uart1BYTE(0X1A);DelaySec(1);//延时DelaySec(1);//延时DelaySec(1);//延时DelaySec(1);//延时P14=0;//发送英文短信结束Uart1Sends(AT+CMGD=1\r\n);//删除SIM卡中的内容DelaySec(1);//延时//以下是拨打10086代码Uart1Sends(num);//拨打10086DelaySec(1);//延时DelaySec(1);//延时DelaySec(1);//延时DelaySec(1);//延时//拨打电话代码结束//以下内容没有实际测试,仅供参考while(1){if(hand(CMTI)){P13=0;clear_rec_data();DelaySec(1);//延时Uart1Sends(AT+CMGR=1\r\n);//DelaySec(1);//延时i=0;while(!hand(OK)){clear_rec_data();i++;Uart1Sends(AT+CMGR=1\r\n);//DelaySec(1);//延时if(i=2)//chucuo{break;//return;}else;}clear_rec_data();DelaySec(1);//延时if(hand(relayon)){P14=0;//break;}elseif(hand(relayoff)){P15=0;//break;}else{//break;}Uart1Sends(AT+CMGD=1\r\n);//DelaySec(1);//延时}elseif(hand(ring))//电话进来挂断电话{Uart1Sends(ATH\r\n);//DelaySec(1);//延时i=0;while(!hand(OK)){clear_rec_data();i++;Uart1Sends(ATH\r\n);//DelaySec(1);//延时if(i=2){break;//return;}else;}clear_rec_data();DelaySec(1);//延时}else{;}}}
本文标题:51控制SIM900发送短信程序
链接地址:https://www.777doc.com/doc-2726347 .html