找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1976|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机结合GSM模块SIM900A接受短信来做控制

[复制链接]
回帖奖励 5 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次(中奖概率 50%)
跳转到指定楼层
楼主
ID:403916 发表于 2020-4-30 17:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
研究了下论坛里关于GSM模块SIM900A的程序,稍微整理了一个单纯接收短信来执行自定义内容的程序,但是没有实物来调试,有用过的指点一下吗~~~~附带AT指令集和程序
  1. #include <reg52.h>
  2. #include <absacc.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <math.h>
  6. #include <stdlib.h>
  7. #include <intrins.h>
  8. #define uint unsigned int
  9. #define uchar unsigned char
  10.    
  11. uchar code AT_CMGF[]= "AT+CMGF=1\r";                 //发送数据为文本格式
  12. uchar code AT_CMGR[]= "AT+CMGR=2\r";                                  //读短信
  13. uchar code AT_CSCA[]="AT+CSCA=\"+8613800771500\"";   //设置服务中心号码     
  14. uchar code AT_CNMI[]= "AT+CNMI=2,1,0,0\r";           //新消息提示:设置为mode=2,mt=1
  15. uchar code AT_CMGD[]="AT+CMGD=1,1\r\n";                                   //删除已读消息

  16. uchar RsPoint=0;                                                                         
  17. uchar RsBuf[100];                                                     //缓存接收数据

  18. uint i, k,ii;

  19. void delayms(uint x)//延时
  20. {
  21.         uint i,j;
  22.         for(i=x;i>0;i--)
  23.                 for(j=110;j>0;j--);
  24. }
  25. //=================================================//
  26. void Print_Char(uchar ch)     //发送单个字符
  27. {
  28.         SBUF=ch;           //送入缓冲区
  29.         while(TI==0);      //等待发送完毕
  30.         TI=0;              //软件清零
  31. }

  32. //=================================================//
  33. void Print_Str(uchar *str)//发送字符串   
  34. {
  35.         while(*str!='\0')
  36.         {
  37.            Print_Char(*str++);                                                                                                                                                       
  38.         }
  39. }
  40. //=================================================//
  41. void clr_rsbuf(void)         //清空接收缓存   
  42. {
  43.          for(RsPoint=0;RsPoint<100;RsPoint++)
  44.      {
  45.        RsBuf[RsPoint]=0x00;
  46.      }
  47.      RsPoint=0;
  48. }
  49. //======================================================//
  50. void ser()interrupt 4                                //串口中断,接受数据
  51. {
  52.           if(RI==1)
  53.       {
  54.             RI=0;
  55.             RsBuf[RsPoint++]=SBUF;
  56.             if (RsPoint>=sizeof(RsBuf))           //计算对象类型大小
  57.             {
  58.             RsPoint=0;//FlagRs485=0;
  59.             }  
  60.       }
  61. }
  62. //=================================================//
  63. Ini_UART(void)//串口初始化、定时器初始化
  64. {
  65.                 TMOD = 0x20;      //T1方式2,用于UART波特率     
  66.                 TH1 = 0xFD;       //UART波特率设置:9600     
  67.                 TL1 = 0xFD;
  68.                 SCON = 0x50;  ////UART方式1:8位UART;   REN=1:允许接收   
  69.                 PCON = 0x00;
  70.                
  71.                 TF1 = 1;     // 中断标志位
  72.                 TR1 = 1;    // 启动定时器1   
  73.                 ES=1;       //启动串行口中断
  74.                 ET0=1;      //启动中断功能
  75.                 EA=1;
  76. }
  77. //=================================================//
  78. void ScanMessage(void)                                        //信息检测
  79. {
  80.         for(ii=0;ii<100;ii++)  
  81.                 if(RsBuf[ii-3]=='C'&&RsBuf[ii-2]=='M'&&RsBuf[ii-1]=='T'&&RsBuf[ii]=='I')                   //接收到短信后返回的指令
  82.             {                                                                                                                                                               
  83.              clr_rsbuf();

  84.              Print_Str(AT_CMGR);                                                                                                                     //读短信

  85.              delayms(250);delayms(250);delayms(250);delayms(250);
  86.   
  87.              for(i=0;i<100;i++)
  88.              {
  89.                            if(RsBuf[i-3]=='Z'&&RsBuf[i-2]=='F'&&RsBuf[i-1]=='C'&&RsBuf[i]=='G')                           //自定义接收特定的短信内容
  90.                            {                                                                                                                                                           //我这里是支付成功的简写
  91.                                   //这里添加控制内容
  92.                            }
  93.                            Print_Str(AT_CMGD);                                                                                                                           //删除已读短信
  94.                delayms(100);
  95.                            clr_rsbuf();
  96.              }   
  97.               
  98.                 }
  99. }
  100. //===============================================================//
  101. void main()
  102. {      
  103.        Ini_UART();
  104.            k=0;
  105.            Print_Str("AT\r\n");
  106.            delayms(100);

  107.        Print_Str(AT_CMGF);                         //文本模式
  108.        delayms(100);

  109.        Print_Str(AT_CNMI);                         //新消息提示
  110.        delayms(200);

  111.            Print_Str("AT+CMGD=1,4\r\n");  //删除所有短信
  112.            delayms(100);

  113.            clr_rsbuf();                                   //清缓存
  114.            delayms(100);

  115.        while(1)
  116.            {  
  117.                      ScanMessage();
  118.           
  119.                      
  120.             }   
  121. }
复制代码

GSM SIM900A.zip

1.48 MB, 下载次数: 47

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表