微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > GSM,GSM急急急SIM300S

GSM,GSM急急急SIM300S

时间:10-02 整理:3721RD 点击:

在调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,"+CMTI")!=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);
}

先用电脑来接收命令,看接收到的命令正常不

电脑连接,可以正常操作

sim300s 停产的哦, 还在调这个啊

不错的文件,值得收藏

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top