失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > STC15单片机使用AT命令的C语言编程

STC15单片机使用AT命令的C语言编程

时间:2023-04-23 21:31:03

相关推荐

STC15单片机使用AT命令的C语言编程

STC15单片机使用SIM800C 编程

系统配置系统功能实现与SIM800C之间的交互AT命令的发送与读取AT+CSQ发送命令和读取命令总结

系统配置

采用一个 IAP15W4K58S4,也就是一个STC15W4K58S4的单片机和SIM800C进行连接。使用一个上网卡,实现物联网操作。硬件连接非常简单,可以非常容易的实现,测试也非常简单,将单片机设置2个串口,一个串口做调试用,另一个串口是和SIM800C进行连接。这里有一个比较奇怪的现象,我在单片机中设置的波特率是9600,一般速率会减半,所以在单片机中将与SIM800C实现串口通讯的波特率设置为19200,这样就可以实现通讯了。

系统功能实现

要实现一些简单的计算机指令还是需要费一些周折的,要使用诸如printf命令和scanf命令都要费一些功夫。STC15系列的软件还是不如NANO等Arduino计算机开发的抽象化,还是比较底层就可以开发应用的。在这里说一下要使用printf的话,要在程序中修改putchar这个函数,修改的方法如下:

void putchar(char c){ES = 0;SBUF = c;while(TI==0);TI = 0;ES = 1;}

在程序中将原来的库函数中的putchar去除就可以正常的使用printf的函数了。

与SIM800C之间的交互

系统上电启动后,首先我们是要给SIM800C发送一个AT命令,来测试SIM800C是否是激活的。当激活时,SIM800C会返回一个OK的命令。再就是要发送一个AT+CSQ命令,让SIM800检测网络信号是否正常。发送了命令后,要对返回的命令进行读取和分析。

AT命令的发送与读取

发送指令就是一般的向串口发送字符串指令:

if (cStep == 0){cStep = 1; // Initialize Step: ATPrintString2("AT\r");printf("The Step number = %d\r\n", cStep);iSendFlag = 1;}

当SIM800C得到AT命令,如果回显设置的是ATE1,则回显AT,如果正常,就返回OK,如果不正常或者是没有连接,返回为空。对返回值的检测要注意一般会采用strstr函数来得到分字符串,返回的例程如下:

printf("%s", hubSIMChar);desstr = strstr(hubSIMChar, "OK");if (strncmp(desstr, "OK", 2) == 0){printf("SIM800C is OK\r\n");cStep += 1;}

再这里的字符串比较用到了strncmp函数。如果直接用strcmp函数就不能正常的运行。而且要注意,相等的条件是strncmp的结果是0表明两个分字符串相等。

AT+CSQ发送命令和读取命令

当发送AT命令后,返回OK说明SIM800C可以正常工作了,现在发送这个AT+CSQ命令来测试网络连接信号是否正常。

PrintString2("AT+CSQ\r");iSendFlag = 2;cStep = 3;

发送完命令后等待SIM800C来返回。

printf("%s", hubSIMChar);desstr = strstr(hubSIMChar, "+CSQ: ");sscanf(desstr, "%s %d,%d", str1, &icsq1,&icsq2);printf("The mobile signal is:%d,%d\r\n", icsq1, icsq2);iSendFlag = 0;if (icsq1 < 10)printf("The mobile signal is too low\r\n");

再计算机上运行结果如下:

The step number = 3

AT+CSQ

+CSQ: 18,5

OK

The mobile signal is: 18,5

总结

要使用单片机与AT命令打交道,就要熟练的掌握字符串处理,用好字符串的函数非常重要。

如果觉得《STC15单片机使用AT命令的C语言编程》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。