标题:
程序编译错误 stc15单片机关于sim800c gsm模块的控制代码
[打印本页]
作者:
a60483882
时间:
2019-4-25 16:43
标题:
程序编译错误 stc15单片机关于sim800c gsm模块的控制代码
基于stc15的GSM模块,接收短信来控制你想控制的的东西
单片机源程序如下:
#include "stc15.h"
#include "delay.h"
#include "main.h"
#include "uart2.h"
#define Success 1U
#define Failure 0U
//定义变量
unsigned long Time_Cont = 0; //定时器计数器
char phoneNumber[] = "xxxxxxxxxx"; //替换成需要被拨打电话的号码
char msg[] = "xxxxxxxxxxx"; //短信内容
char xdata messageBuffer2[100];
//bit isTimeOut2 = 0;
#define MAIN_Fosc 22118400L
#define u16 unsigned int
void delay2_ms(unsigned int ms)
{
u16 i;
do{
i = (u16)(MAIN_Fosc / 13000);
while(--i) ; //14T per loop
}while(--ms);
}
void main()
{
Uart_Init2();
if (sendCommand2("AT\r\n", "OK\r\n", 3000, 10) == Success);
else errorLog2();
delay2_ms(10);
if (sendCommand2("AT+CMGF=1\r\n", "OK\r\n", 1000, 10) == Success);
else errorLog2();
delay2_ms(10);
if (sendCommand2("AT+CSCS=\"GSM\"\r\n", "OK\r\n", 1000, 10) == Success);
else errorLog2();
delay2_ms(10);
if (sendCommand2("AT+CNMI=2,2\r\n", "OK\r\n", 3000, 10) == Success);
else errorLog2();
delay2_ms(10);
// sendMessage(phoneNumber,msg); //发送短信
while(1)
{
if(isStartGetMessage2)
{
isStartGetMessage2 = 0;
Time_Cont = 0;
while (Time_Cont < 1000) //等待1s接收短信数据
{
delay2_ms(100);
Time_Cont += 100;
}
isGetMessage2 = Success;
}
if( isGetMessage2 == Success)
{
parseMessage2();
if(strstr(messageBuffer2, "reboot conditioner") != NULL || strstr(messageBuffer2, "5F00542F7A7A8C03") != NULL) //55F00 542F 7A7A 8C03 //开启空调
{
// relay2 = 1;
//这里嵌入信息
}
if(strstr(messageBuffer2, "Turn off conditioner") != NULL || strstr(messageBuffer2, "517395ED7A7A8C03") != NULL) //5173 95ED 7A7A 8C03 //关闭空调
{
// relay1 = 0;
//这里也是嵌入信息
}
isGetMessage2 = Failure ;
}
}
}
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();
}
void sendMessage(char *number,char *msg)
{
xdata char send_buf[20] = {0};
memset(send_buf, 0, 20); //清空
strcpy(send_buf, "AT+CMGS=\"");
strcat(send_buf, number);
strcat(send_buf, "\"\r\n");
if (sendCommand2(send_buf, ">", 3000, 10) == Success);
else errorLog2();
SendString2(msg);
SendData2(0x1A);
}
void phone(char *number)
{
char send_buf[20] = {0};
memset(send_buf, 0, 20); //清空
strcpy(send_buf, "ATD");
strcat(send_buf, number);
strcat(send_buf, ";\r\n");
if (sendCommand2(send_buf, "SOUNDER", 10000, 10) == Success);
else errorLog2();
}
void errorLog()
{
while (1)
{
if (sendCommand2("AT\r\n", "OK", 100, 10) == Success)
{
soft_reset2();
}
delay2_ms(200);
}
}
void soft_reset(void) //制造重启命令
{
((void (code *) (void)) 0x0000) ();
}
unsigned int sendCommand(char *Command, char *Response, unsigned long Timeout, unsigned char Retry)
{
unsigned char n;
CLR_Buf2();
for (n = 0; n < Retry; n++)
{
SendString2(Command); //发送GPRS指令
Time_Cont = 0;
while (Time_Cont < Timeout)
{
delay2_ms(100);
Time_Cont += 100;
if (strstr(Rec_Buf2, Response) != NULL)
{
CLR_Buf2();
return Success;
}
}
Time_Cont = 0;
}
CLR_Buf2();
return Failure;
}
复制代码
#include "stc15.h"
#include "delay.h"
#include "sim800c.h"
#include "uart2.h"
#define Success 1U
#define Failure 0U
//定义变量
unsigned long Time_Cont = 0; //定时器计数器
char phoneNumber[] = "xxxxxxxxxx"; //替换成需要被拨打电话的号码
char msg[] = "xxxxxxxxxxx"; //短信内容
char xdata messageBuffer2[100];
//bit isTimeOut2 = 0;
#define MAIN_Fosc 22118400L
#define u16 unsigned int
void delay2_ms(unsigned int ms)
{
u16 i;
do{
i = (u16)(MAIN_Fosc / 13000);
while(--i) ; //14T per loop
}while(--ms);
}
void sim800c()
{
Uart_Init2();
if (sendCommand2("AT\r\n", "OK\r\n", 3000, 10) == Success);
else errorLog2();
delay2_ms(10);
if (sendCommand2("AT+CMGF=1\r\n", "OK\r\n", 1000, 10) == Success);
else errorLog2();
delay2_ms(10);
if (sendCommand2("AT+CSCS=\"GSM\"\r\n", "OK\r\n", 1000, 10) == Success);
else errorLog2();
delay2_ms(10);
if (sendCommand2("AT+CNMI=2,2\r\n", "OK\r\n", 3000, 10) == Success);
else errorLog2();
delay2_ms(10);
// sendMessage(phoneNumber,msg); //发送短信
if(isStartGetMessage2)
{
isStartGetMessage2 = 0;
Time_Cont = 0;
while (Time_Cont < 1000) //等待1s接收短信数据
{
delay2_ms(100);
Time_Cont += 100;
}
isGetMessage2 = Success;
}
if( isGetMessage2 == Success)
{
parseMessage2();
if(strstr(messageBuffer2, "reboot conditioner") != NULL || strstr(messageBuffer2, "5F00542F7A7A8C03") != NULL) //55F00 542F 7A7A 8C03 //开启空调
{
// relay2 = 1;
//这里嵌入信息
}
if(strstr(messageBuffer2, "Turn off conditioner") != NULL || strstr(messageBuffer2, "517395ED7A7A8C03") != NULL) //5173 95ED 7A7A 8C03 //关闭空调
{
// relay1 = 0;
//这里也是嵌入信息
}
isGetMessage2 = Failure ;
}
}
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();
}
void sendMessage(char *number,char *msg)
{
xdata char send_buf[20] = {0};
memset(send_buf, 0, 20); //清空
strcpy(send_buf, "AT+CMGS=\"");
strcat(send_buf, number);
strcat(send_buf, "\"\r\n");
if (sendCommand2(send_buf, ">", 3000, 10) == Success);
else errorLog2();
SendString2(msg);
SendData2(0x1A);
}
void phone(char *number)
{
char send_buf[20] = {0};
memset(send_buf, 0, 20); //清空
strcpy(send_buf, "ATD");
strcat(send_buf, number);
strcat(send_buf, ";\r\n");
if (sendCommand2(send_buf, "SOUNDER", 10000, 10) == Success);
else errorLog2();
}
void errorLog()
{
while (1)
{
if (sendCommand2("AT\r\n", "OK", 100, 10) == Success)
{
soft_reset2();
}
delay2_ms(200);
}
}
void soft_reset(void) //制造重启命令
{
((void (code *) (void)) 0x0000) ();
}
unsigned int sendCommand(char *Command, char *Response, unsigned long Timeout, unsigned char Retry)
{
unsigned char n;
CLR_Buf2();
for (n = 0; n < Retry; n++)
{
SendString2(Command); //发送GPRS指令
Time_Cont = 0;
while (Time_Cont < Timeout)
{
delay2_ms(100);
Time_Cont += 100;
if (strstr(Rec_Buf2, Response) != NULL)
{
CLR_Buf2();
return Success;
}
}
Time_Cont = 0;
}
CLR_Buf2();
return Failure;
}
复制代码
程序编译错误 如何修改 求大神:
总控制结合备份部.rar
(57.78 KB, 下载次数: 113)
2019-4-25 16:42 上传
点击文件名下载附件
作者:
dragonlt
时间:
2019-4-25 21:51
谢谢分享!
作者:
shwghsy
时间:
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();
}
作者:
dzbj
时间:
2019-5-3 11:14
感谢楼主分享 太及时了 手里的SIM800模块还没弄呢 有楼主的程序少走很多弯路啊
作者:
228298253
时间:
2019-5-5 19:02
赞!!!感谢楼主分享
作者:
lvpeng7446281
时间:
2020-1-12 22:46
编译不能成功
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1