完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
找了一个大神的程序,调试了好久,还是不行,AT命令正常发送,led没要求亮的会自己亮,很费解,跪求原子哥帮帮忙,实在是快崩溃了,,然后又试了一下发短息,短信可以通过单片机发送指令正常发送,脑子已经成浆糊了,各位帮帮忙吧。顺便在此感谢一下名叫MTMORI007的一名老师的帮助,感谢他腾出时间为我解答问题。 /*=================================== 程序名:GPS模块实现短信控制灯泡 开发者:MTMORI007 开发时间:2015-7-1 本模块移动号:188563xxxxx ===================================*/ #include #include //#include #define uchar unsigned char #define uint unsigned int #define Rx_data_length 110 //unsigned char Speed=6;//调整速度 //unsigned int q=128; uchar Admin_num[11]="136060xxxxx"; //手机号码 uint bb; //***it PC_LED1=P1^0;//继电器指示灯引脚定义 //***it PC_JDQ1=P1^1;//继电器引脚定义 //***it PC_LED2=P1^2;//继电器指示灯引脚定义 //***it PC_JDQ2=P1^3;//继电器引脚定义 bit Response_receive_SMS_flag=0; uchar Rx_bit,i,j; uchar g_timeout=0;//j是aa数组的指针,g_timeout判断是否超时 uchar xdata Rx_data[Rx_data_length]; void Response_receive_SMS(void); void Uart_SendChar(uchar ch); void Uart_SendString(uchar *String); void uart_init(uint p); void Clear_Rxdata(uchar length); void panduan_mingling(void); void delay(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=100;j>0;j--); } void panduan_mingling(void) { int q; //PC_LED1=1; //PC_JDQ1=1; q=strpos(Rx_data,'x'); if(q>0)//如果短信含有x? { if(Rx_data[q]=='x' && Rx_data[q+1]=='o' && Rx_data[q+2] =='p' && Rx_data[q+3]=='e' && Rx_data[q+4]=='n' && Rx_data[q+5]=='1') //判断的短信内容,可以不止5位 { //PC_LED1=0; //PC_JDQ1=0; } if(Rx_data[q]=='x' && Rx_data[q+1]=='c' && Rx_data[q+2] =='l' && Rx_data[q+3]=='o' && Rx_data[q+4]=='s' && Rx_data[q+5]=='e'&& Rx_data[q+6]=='1') //判断的短信内容,可以不止5位 { //PC_LED1=1; //PC_JDQ1=1; } /*if(aa[k+1]=='c' && aa[k+2]=='l' && aa[k+3]=='o' && aa[k+4]=='s' && aa[k+5]=='e' && aa[k+6]=='1') //判断的短信内容,可以不止5位 { PC_LED1=1; PC_JDQ1=1; } if(aa[k+1]=='o'&& aa[k+2]=='p'&& aa[k+3]=='e' && aa[k+4]=='n' && aa[k+5]=='2') //判断的短信内容,可以不止5位 { PC_LED2=0; PC_JDQ2=0; } if(aa[k+1]=='c' && aa[k+2]=='l' && aa[k+3]=='o' && aa[k+4]=='s' && aa[k+5]=='e' && aa[k+6]=='2') //判断的短信内容,可以不止5位 { PC_LED2=1; PC_JDQ2=1; }*/ } } void main(void) { EA=1;//开总中断 uart_init(1);//串口初始化 Rx_bit=0; delay(100); Uart_SendString("AT+CLIP=1rn"); delay(1000); Uart_SendString("AT+CMGD=1rn");//清除所有短信 delay(1000); Uart_SendString("AT+CSCS="GSM"rn"); //设置sim900模块GSM字符集 delay(1000); Uart_SendString("AT+CMGF=1rn"); //设置sim900模块为英文方式发送短信 delay(1000); Uart_SendString("AT+CNMI=2,1rn"); //设置sim900模块为提醒新消息返回数据:+CMTI:"SM",2, delay(1000); Clear_Rxdata(Rx_data_length); delay(500); memset(Rx_data,' ',sizeof(Rx_data));//Rx_data数组中元素都为空格 //P1=0; while(1) { EA=1; EX0=1;//开外部中断0 IT0=0;//脉冲触发方式 Response_receive_SMS(); //循环检测是否收到短信,若收到短信则 Response_receive_SMS_flag==1 delay(100); Rx_bit=0; if(Response_receive_SMS_flag==1) { Uart_SendString("AT+CMGR=1rn"); //短信读取 delay(500); /******判断内容函数********/ panduan_mingling(); bb=1; /*********************************/ Response_receive_SMS_flag=0; Clear_Rxdata(Rx_data_length); delay(100); Uart_SendString("AT+CMGD=1rn"); //清除所有短信 delay(100); delay(1000); if(bb==1) { delay(1000); Uart_SendString("AT+CMGS=""); for(j=0;j<11;j++) { SBUF=Admin_num[j]; while(TI==0); TI=0; } Uart_SendString(""r"); delay(200); Uart_SendString("YES_capration!"); //返回的短信内容 delay(300); Uart_SendChar(0x1a); delay(1000); bb=0; } } } } void ser_main() interrupt 4 { uchar i=0; char tmp; ES=0; if(RI==1) //当硬件接收到一个数据时,RI会置位 { if(SBUF!=0x0d&&SBUF!=0x0a&&SBUF!=' ')//去除所有的空格 { tmp=SBUF; Rx_data[Rx_bit]=SBUF; Rx_bit++; } if(Rx_bit==Rx_data_length) { Rx_bit=0; } RI=0; //软件清除接收中断 } ES=1; } void Response_receive_SMS(void) { uchar i=0; for(i=0;i<=Rx_data_length;i++) { if(Rx_data =='+' &&Rx_data[i+1]=='C' &&Rx_data[i+2]=='M' &&Rx_data[i+3]=='T' &&Rx_data[i+4]=='I' &&Rx_data[i+5]==':') //判断是否接受短信 { Response_receive_SMS_flag=1; return; }else { Response_receive_SMS_flag=0; } } } /******************************************************************** * 名称 : Uart_SendChar(uchar ch) * 功能 : 向串口发送一个字符 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void Uart_SendChar(uchar ch) { SBUF=ch; while(TI==0); TI=0; } /******************************************************************** * 名称 : Uart_SendChar(uchar ch) * 功能 : 向串口发送一个字符串 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void Uart_SendString(uchar *String) { while (*String !=' |