找回密码
 立即注册

QQ登录

只需一步,快速开始

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

程序编译错误 stc15单片机关于sim800c gsm模块的控制代码

[复制链接]
跳转到指定楼层
楼主
ID:202655 发表于 2019-4-25 16:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于stc15的GSM模块,接收短信来控制你想控制的的东西

单片机源程序如下:

  1. #include "stc15.h"
  2. #include "delay.h"
  3. #include "main.h"
  4. #include "uart2.h"
  5. #define Success 1U
  6. #define Failure 0U

  7. //定义变量
  8. unsigned long  Time_Cont = 0;       //定时器计数器

  9. char phoneNumber[] = "xxxxxxxxxx";                //替换成需要被拨打电话的号码
  10. char msg[] = "xxxxxxxxxxx";                //短信内容

  11. char xdata messageBuffer2[100];
  12. //bit isTimeOut2 = 0;
  13. #define MAIN_Fosc                22118400L        
  14. #define u16        unsigned int        
  15. void delay2_ms(unsigned int  ms)
  16. {
  17.    u16 i;
  18.          do{
  19.                  
  20.             i = (u16)(MAIN_Fosc / 13000);
  21.                   while(--i)        ;   //14T per loop
  22.      }while(--ms);
  23. }





  24. void main()
  25. {

  26.     Uart_Init2();

  27.         if (sendCommand2("AT\r\n", "OK\r\n", 3000, 10) == Success);
  28.         else errorLog2();
  29.         delay2_ms(10);

  30.         if (sendCommand2("AT+CMGF=1\r\n", "OK\r\n", 1000, 10) == Success);
  31.         else errorLog2();
  32.         delay2_ms(10);

  33.         if (sendCommand2("AT+CSCS=\"GSM\"\r\n", "OK\r\n", 1000, 10) == Success);
  34.         else errorLog2();
  35.         delay2_ms(10);

  36.         if (sendCommand2("AT+CNMI=2,2\r\n", "OK\r\n", 3000, 10) == Success);
  37.         else errorLog2();
  38.         delay2_ms(10);

  39. //        sendMessage(phoneNumber,msg);                //发送短信


  40.         while(1)
  41.         {        
  42.                 if(isStartGetMessage2)
  43.                 {
  44.                         isStartGetMessage2 = 0;
  45.                         Time_Cont = 0;
  46.                         
  47.                         while (Time_Cont < 1000)        //等待1s接收短信数据
  48.                         {
  49.                                 delay2_ms(100);
  50.                                 Time_Cont += 100;
  51.                         }
  52.                         isGetMessage2 =         Success;
  53.                 }
  54.                 if( isGetMessage2 == Success)
  55.                 {
  56.                         parseMessage2();
  57.                                 
  58.         
  59.                         if(strstr(messageBuffer2, "reboot conditioner") != NULL || strstr(messageBuffer2, "5F00542F7A7A8C03") != NULL)        //55F00 542F 7A7A 8C03  //开启空调
  60.                         {
  61. //                                  relay2 = 1;
  62.                                 //这里嵌入信息
  63.                         }
  64.         
  65.         
  66.                         if(strstr(messageBuffer2, "Turn off conditioner") != NULL || strstr(messageBuffer2, "517395ED7A7A8C03") != NULL)        //5173 95ED 7A7A 8C03 //关闭空调
  67.                         {
  68. //                                relay1 = 0;
  69.                                 //这里也是嵌入信息
  70.                         }
  71.                         isGetMessage2 = Failure        ;
  72.                 }
  73.         }
  74. }

  75. void parseMessage()
  76. {
  77.         char *messageHead=NULL;
  78.         char *messageEnd1=NULL;
  79.         char *messageEnd2=NULL;

  80.         memset(messageBuffer2, 0, sizeof(messageBuffer2)-1);         //清空短信内容缓冲区
  81.         messageHead = strstr(Rec_Buf2, "CMT");
  82.         if (messageHead != NULL)
  83.         {
  84.                 messageEnd1 = strstr(messageHead, "\n");
  85.                 if (messageEnd1 != NULL)
  86.                 {
  87.                         messageEnd1 ++;
  88.                         messageEnd2 = strstr(messageEnd1, "\n");
  89.                         if (messageEnd2 != NULL)
  90.                         {        
  91.                                 memcpy(messageBuffer2, messageEnd1, messageEnd2 - messageEnd1);
  92.         
  93.                         }
  94.                 }

  95.         }

  96.         CLR_Buf2();
  97. }



  98. void sendMessage(char *number,char *msg)
  99. {
  100.         xdata char send_buf[20] = {0};
  101.         memset(send_buf, 0, 20);    //清空
  102.         strcpy(send_buf, "AT+CMGS=\"");
  103.         strcat(send_buf, number);
  104.         strcat(send_buf, "\"\r\n");
  105.         if (sendCommand2(send_buf, ">", 3000, 10) == Success);
  106.         else errorLog2();

  107.         SendString2(msg);

  108.         SendData2(0x1A);
  109. }

  110. void phone(char *number)
  111. {
  112.         char send_buf[20] = {0};
  113.         memset(send_buf, 0, 20);    //清空
  114.         strcpy(send_buf, "ATD");
  115.         strcat(send_buf, number);
  116.         strcat(send_buf, ";\r\n");

  117.         if (sendCommand2(send_buf, "SOUNDER", 10000, 10) == Success);
  118.         else errorLog2();
  119. }

  120. void errorLog()
  121. {
  122.         while (1)
  123.         {
  124.                   if (sendCommand2("AT\r\n", "OK", 100, 10) == Success)
  125.                 {
  126.                         soft_reset2();
  127.                 }
  128.                 delay2_ms(200);
  129.         }
  130. }

  131. void soft_reset(void)         //制造重启命令
  132. {
  133.    ((void (code *) (void)) 0x0000) ();
  134. }

  135. unsigned int sendCommand(char *Command, char *Response, unsigned long Timeout, unsigned char Retry)
  136. {
  137.         unsigned char n;
  138.         CLR_Buf2();
  139.         for (n = 0; n < Retry; n++)
  140.         {
  141.                 SendString2(Command);                 //发送GPRS指令

  142.                 Time_Cont = 0;
  143.                 while (Time_Cont < Timeout)
  144.                 {
  145.                         delay2_ms(100);
  146.                         Time_Cont += 100;
  147.                         if (strstr(Rec_Buf2, Response) != NULL)
  148.                         {
  149.                                 
  150.                                 CLR_Buf2();
  151.                                 return Success;
  152.                         }
  153.                         
  154.                 }
  155.                 Time_Cont = 0;
  156.         }
  157.         
  158.         CLR_Buf2();
  159.         return Failure;
  160. }
复制代码

  1. #include "stc15.h"
  2. #include "delay.h"
  3. #include "sim800c.h"
  4. #include "uart2.h"
  5. #define Success 1U
  6. #define Failure 0U

  7. //定义变量
  8. unsigned long  Time_Cont = 0;       //定时器计数器

  9. char phoneNumber[] = "xxxxxxxxxx";                //替换成需要被拨打电话的号码
  10. char msg[] = "xxxxxxxxxxx";                //短信内容

  11. char xdata messageBuffer2[100];
  12. //bit isTimeOut2 = 0;
  13. #define MAIN_Fosc                22118400L        
  14. #define u16        unsigned int        
  15. void delay2_ms(unsigned int  ms)
  16. {
  17.    u16 i;
  18.          do{
  19.                  
  20.             i = (u16)(MAIN_Fosc / 13000);
  21.                   while(--i)        ;   //14T per loop
  22.      }while(--ms);
  23. }





  24. void sim800c()
  25. {

  26.     Uart_Init2();

  27.         if (sendCommand2("AT\r\n", "OK\r\n", 3000, 10) == Success);
  28.         else errorLog2();
  29.         delay2_ms(10);

  30.         if (sendCommand2("AT+CMGF=1\r\n", "OK\r\n", 1000, 10) == Success);
  31.         else errorLog2();
  32.         delay2_ms(10);

  33.         if (sendCommand2("AT+CSCS=\"GSM\"\r\n", "OK\r\n", 1000, 10) == Success);
  34.         else errorLog2();
  35.         delay2_ms(10);

  36.         if (sendCommand2("AT+CNMI=2,2\r\n", "OK\r\n", 3000, 10) == Success);
  37.         else errorLog2();
  38.         delay2_ms(10);

  39. //        sendMessage(phoneNumber,msg);                //发送短信



  40.                 if(isStartGetMessage2)
  41.                 {
  42.                         isStartGetMessage2 = 0;
  43.                         Time_Cont = 0;
  44.                         
  45.                         while (Time_Cont < 1000)        //等待1s接收短信数据
  46.                         {
  47.                                 delay2_ms(100);
  48.                                 Time_Cont += 100;
  49.                         }
  50.                         isGetMessage2 =         Success;
  51.                 }
  52.                 if( isGetMessage2 == Success)
  53.                 {
  54.                         parseMessage2();
  55.                                 
  56.         
  57.                         if(strstr(messageBuffer2, "reboot conditioner") != NULL || strstr(messageBuffer2, "5F00542F7A7A8C03") != NULL)        //55F00 542F 7A7A 8C03  //开启空调
  58.                         {
  59. //                                  relay2 = 1;
  60.                                 //这里嵌入信息
  61.                         }
  62.         
  63.         
  64.                         if(strstr(messageBuffer2, "Turn off conditioner") != NULL || strstr(messageBuffer2, "517395ED7A7A8C03") != NULL)        //5173 95ED 7A7A 8C03 //关闭空调
  65.                         {
  66. //                                relay1 = 0;
  67.                                 //这里也是嵌入信息
  68.                         }
  69.                         isGetMessage2 = Failure        ;
  70.                 }
  71.         }


  72. void parseMessage()
  73. {
  74.         char *messageHead=NULL;
  75.         char *messageEnd1=NULL;
  76.         char *messageEnd2=NULL;

  77.         memset(messageBuffer2, 0, sizeof(messageBuffer2)-1);         //清空短信内容缓冲区
  78.         messageHead = strstr(Rec_Buf2, "CMT");
  79.         if (messageHead != NULL)
  80.         {
  81.                 messageEnd1 = strstr(messageHead, "\n");
  82.                 if (messageEnd1 != NULL)
  83.                 {
  84.                         messageEnd1 ++;
  85.                         messageEnd2 = strstr(messageEnd1, "\n");
  86.                         if (messageEnd2 != NULL)
  87.                         {        
  88.                                 memcpy(messageBuffer2, messageEnd1, messageEnd2 - messageEnd1);
  89.         
  90.                         }
  91.                 }

  92.         }

  93.         CLR_Buf2();
  94. }



  95. void sendMessage(char *number,char *msg)
  96. {
  97.         xdata char send_buf[20] = {0};
  98.         memset(send_buf, 0, 20);    //清空
  99.         strcpy(send_buf, "AT+CMGS=\"");
  100.         strcat(send_buf, number);
  101.         strcat(send_buf, "\"\r\n");
  102.         if (sendCommand2(send_buf, ">", 3000, 10) == Success);
  103.         else errorLog2();

  104.         SendString2(msg);

  105.         SendData2(0x1A);
  106. }

  107. void phone(char *number)
  108. {
  109.         char send_buf[20] = {0};
  110.         memset(send_buf, 0, 20);    //清空
  111.         strcpy(send_buf, "ATD");
  112.         strcat(send_buf, number);
  113.         strcat(send_buf, ";\r\n");

  114.         if (sendCommand2(send_buf, "SOUNDER", 10000, 10) == Success);
  115.         else errorLog2();
  116. }

  117. void errorLog()
  118. {
  119.         while (1)
  120.         {
  121.                   if (sendCommand2("AT\r\n", "OK", 100, 10) == Success)
  122.                 {
  123.                         soft_reset2();
  124.                 }
  125.                 delay2_ms(200);
  126.         }
  127. }

  128. void soft_reset(void)         //制造重启命令
  129. {
  130.    ((void (code *) (void)) 0x0000) ();
  131. }

  132. unsigned int sendCommand(char *Command, char *Response, unsigned long Timeout, unsigned char Retry)
  133. {
  134.         unsigned char n;
  135.         CLR_Buf2();
  136.         for (n = 0; n < Retry; n++)
  137.         {
  138.                 SendString2(Command);                 //发送GPRS指令

  139.                 Time_Cont = 0;
  140.                 while (Time_Cont < Timeout)
  141.                 {
  142.                         delay2_ms(100);
  143.                         Time_Cont += 100;
  144.                         if (strstr(Rec_Buf2, Response) != NULL)
  145.                         {
  146.                                 
  147.                                 CLR_Buf2();
  148.                                 return Success;
  149.                         }
  150.                         
  151.                 }
  152.                 Time_Cont = 0;
  153.         }
  154.         
  155.         CLR_Buf2();
  156.         return Failure;
  157. }
复制代码

程序编译错误 如何修改 求大神:
总控制结合备份部.rar (57.78 KB, 下载次数: 113)


评分

参与人数 2黑币 +54 收起 理由
dzbj + 4 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:521807 发表于 2019-4-25 21:51 | 只看该作者
谢谢分享!
回复

使用道具 举报

板凳
ID:251061 发表于 2019-5-3 09:07 | 只看该作者
这个函数有点不明白
void parseMessage()
{
        char *messageHead=NULL;
        char *messageEnd1=NULL;
        char *messageEnd2=NULL;
下面的有点看不明白,谁能给解释一下,谢谢!
        memset(messageBuffer2, 0, sizeof(messageBuffer2)-1);         //清空短信内容缓冲区
        messageHead = strstr(Rec_Buf2, "CMT");
        if (messageHead != NULL)
        {
                messageEnd1 = strstr(messageHead, "\n");
                if (messageEnd1 != NULL)
                {
                        messageEnd1 ++;
                        messageEnd2 = strstr(messageEnd1, "\n");
                        if (messageEnd2 != NULL)
                        {        
                                memcpy(messageBuffer2, messageEnd1, messageEnd2 - messageEnd1);
        
                        }
                }

        }

        CLR_Buf2();
}
回复

使用道具 举报

地板
ID:47286 发表于 2019-5-3 11:14 | 只看该作者
感谢楼主分享 太及时了 手里的SIM800模块还没弄呢 有楼主的程序少走很多弯路啊
回复

使用道具 举报

5#
ID:264360 发表于 2019-5-5 19:02 | 只看该作者
赞!!!感谢楼主分享
回复

使用道具 举报

6#
ID:505629 发表于 2020-1-12 22:46 | 只看该作者
编译不能成功
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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