本帖最后由 飞不寻常 于 2012-11-12 17:50 编辑
在调SIM的GSM模块,用
单片机调的,想通过短信控制灯的亮灭,但是无法完成控制,我给了主程序的详细注释,大家帮忙看看哈
现象:我逐个对程序进行了分析和测试,前面的设置都正常,发送短信后,程序可以进入检测函数CheckBuf(),因为里面的指示灯动作了,但是不能识别对应的动作指令,如ongreen 或onyellow等,也就是说不能控制。感觉没有什么问题了,可是还是不行~~%>_<%
程序如下:
#include<STC_NEW_8051.H>
#include<main.h>
#include<Uart1.h>
#include<GSM.h>
/******************毫秒级延时函数**************************/
void delayms(uint ms)
{
uint i;
uint j;
for(i=ms;i>0;i--)
for(j=1000;j>0;j--);
}
/*********************主程序*******************************/
void main()
{
GSM_Start(); //启动GSM模块,检测正常
delayms(10);
Serial_Init(); //串口初始化
CREG(); //网络注册,网络正常
delayms(100);
Set_Text_Mode(); //设置GSM模式,检测正常可用
Yellow=0; //检测用灯,程序可运行
CLR_BUF(); //
while(1)
{
CheckBuf(); //这个是扫描函数,用来实现我的功能的
Red=0; //指示灯闪烁
delayms(100);
Red=1;
delayms(100);
}
}
/******************检查函数**************************/
void CheckBuf(void)
{
if(strstr(Buf_Uart1,"+CM
ti")!=NULL)
{
delayms(10);
Yellow=1; //检测灯,
CLR_BUF(); //清除缓存区
Send_ASCII("AT+CMGR=1"); //读取短信
Enter();
// SendAT("AT+CMGR=1",5);
// Send_ASCII(Buf_Uart1);
delayms(5000);
if(strstr(Buf_Uart1,"onyellow")!=NULL)
Yellow=0;
else if(strstr(Buf_Uart1,"offyellow")!=NULL)
Yellow=1;
else if(strstr(Buf_Uart1,"ongreen")!=NULL)
Green=0;
else if(strstr(Buf_Uart1,"offgreen")!=NULL)
Green=1;
else if(strstr(Buf_Uart1,"onred")!=NULL)
Red=0;
else if(strstr(Buf_Uart1,"offred")!=NULL)
Red=1;
}
/*******************设置GSM文本模式************************/
void Set_Text_Mode()
{
SendAT("ATE1",2); //有回显
SendAT("AT+CNMI=2,1",2); //收到信息提醒
SendAT("AT+CMGF=1",2); //TEXT模式
SendAT("AT+CPMS="SM","SM","SM"",2); //操作位置SIM卡,其中斜杠表示转义字符
SendAT("AT+CMGD=1",5);
}
一周热门 更多>