完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
51单片机和sim900a模块连接, 为什么一直AT握手指令成功不了???????????????? 求大神帮忙 /************************主函数**************************/ void main() { //int j; IGT=0; DelayMs(1000); //延时1s IGT=1; Serial_Init(); //调用串口初始化函数 gsm用 //ti = 1; CLR_Buf(); //清除缓存内容 DelayMs(300); //延时1F 给GSM找网时间,必须注意 while(!Hand("OK")) //判断是否握手成功,如果不成功延时一会,再发送AT握手指令 //每次默认开回显ATE1 { Send_ASCII("AT"); //发送联机指令 Send_Hex(0x0d); //发送回车符 Send_Hex(0x0a); //发送换行符 DelayMs(60000); //延时 } CLR_Buf(); //清除缓存内容 //LED1 = 0; //点亮握手成功指示灯 DelayMs(delay_time); //延时 Send_ASCII("AT+CSCS="GSM"");//GSM网络 Send_Hex(0x0d); //发送回车符 Send_Hex(0x0a); //发送换行符 DelayMs(delay_time); //延时 while(!Hand("OK")); //等待设置成功 CLR_Buf(); //清除缓存内容 DelayMs(delay_time); //延时 Send_ASCII("AT+CPMS="SM","SM","SM"");//所有操作都在MT(模块终端)中进行 Send_Hex(0x0d); //发送回车符 Send_Hex(0x0a); //发送换行符 DelayMs(delay_time); //延时 while(!Hand("OK")); //等待设置成功 CLR_Buf(); //清除缓存内容 //LED2 = 0; //点亮设置成功指示灯 DelayMs(delay_time); //延时 Send_ASCII("AT+CMGF=0");//设置PDU模式 Send_Hex(0x0d); //发送回车符 Send_Hex(0x0a); //发送换行符 DelayMs(delay_time); //延时 while(!Hand("OK")); //等待设置成功 CLR_Buf(); //清除缓存内容 //LED3 = 0; //点亮设置成功指示灯 DelayMs(delay_time); //延时 Send_ASCII("AT+CMGDA=6");//删除所有短信 Send_Hex(0x0d); //发送回车符 Send_Hex(0x0a); //发送换行符 DelayMs(delay_time); //延时 while(!Hand("OK")); //等待设置成功 CLR_Buf(); //清除缓存内容 DelayMs(delay_time); //延时 Send_ASCII("AT+CMGF=1");//设置文本模式 Send_Hex(0x0d); //发送回车符 Send_Hex(0x0a); //发送换行符 DelayMs(delay_time); //延时 while(!Hand("OK")); //等待设置成功 CLR_Buf(); //清除缓存内容 DelayMs(delay_time); //延时 Send_ASCII("AT+CMGDA="DEL ALL"");//删除所有短信 Send_Hex(0x0d); //发送回车符 Send_Hex(0x0a); //发送换行符 DelayMs(delay_time); //延时 while(!Hand("OK")); //等待设置成功 CLR_Buf(); //清除缓存内容 // LED3 = 0; //点亮设置成功指示灯 DelayMs(delay_time); //延时 Send_ASCII("AT+CNMI=2,1");//设置当有新短信到来时提示 Send_Hex(0x0d); //发送回车符 Send_Hex(0x0a); //发送换行符 DelayMs(delay_time); //延时 while(!Hand("OK")); //等待设置成功 CLR_Buf(); //清除缓存内容 // LED3 = 0; //点亮设置成功指示灯 DelayMs(delay_time); //延时 Send_ASCII("AT+CMGF=1"); //文本(TEXT)模式 Send_Hex(0x0d); //发送回车符 Send_Hex(0x0a); //发送换行符 DelayMs(delay_time); //延时 while(!Hand("OK")); //等待设置成功 CLR_Buf(); //清除缓存内容 // LED4 = 0; //点亮设置成功指示灯 DelayMs(delay_time); //延时 Send_ASCII("AT+CMGD=1"); //删除第一条信息 Send_Hex(0x0d); //发送回车符 Send_Hex(0x0a); //发送换行符 DelayMs(delay_time); //延时 while(!Hand("OK")); //等待设置成功 CLR_Buf(); //清除缓存内容 //LED5 = 0; //点亮设置成功指示灯 DelayMs(delay_time); //延时 Send_ASCII("AT"); //发送读取信息指令 Send_Hex(0x0d); //发送回车符 Send_Hex(0x0a); //发送换行符 DelayMs(delay_time); //延时 while(!Hand("OK")); //等待设置成功 //LED1 = 1; DelayMs(delay_time); //延时 Send_ASCII("AT+CMGF=0"); //发送PDU指令 Send_Hex(0x0d); //发送回车符 Send_Hex(0x0a); //发送换行符 DelayMs(delay_time); //延时 while(!Hand("OK")); //等待设置成功 // LED2 = 1; DelayMs(delay_time); //延时 Send_ASCII("AT+CSCS="GSM""); //发送读取信息指令 Send_Hex(0x0d); //发送回车符 Send_Hex(0x0a); //发送换行符 DelayMs(delay_time); //延时 while(!Hand("OK")); //等待设置成功 // LED3 = 1; DelayMs(delay_time); //延时 Send_ASCII("AT+CMGS=29"); //发送读取信息指令 Send_Hex(0x0d); //发送回车符 Send_Hex(0x0a); //发送换行符 DelayMs(delay_time); //延时 while(!Hand("OK")); //等待设置成功 DelayMs(delay_time); //延时 // LED4 = 1; Send_ASCII("0011000D91688107293201F70008A00E8B66544AFF1A5BA46E298FC79AD8"); //发送读取信息指令18710881316F 8117801813F6 Send_Hex(0x1a); Send_Hex(0x0d); //发送回车符 13659212213F 3156292112F3 Send_Hex(0x0a); //发送换行符 DelayMs(delay_time); //延时 while(!Hand("OK")); //等待设置成功 DelayMs(20000); //报警时长************************************************************** } void Serial_Init(void)//串口初始化函数 { SCON = 0x50;//串口:方式1,允许发送和接收 TMOD = 0x20;//定时器1:模式2,8位自动重装模式,用于产生波特率 TH1 = 0xFD; //11.0592MHZ晶振,波特率为9600 TL1 = 0xFD; TR1 = 1; //开启定时器1 TCON中的控制字 ES = 1; //开启串口中断 EA = 1; //开启全局中断 } void Send_ASCII(unsigned char *b) { ES = 0; //关串口中断 for (b; *b!=' |
