单片机与gsm通信c语言,gsm模块如何与单片机通信?

51单片机与GSM模块实现通信

1、检测串口线的好坏

1)将串口线插在电脑上,用短路子短接串口的2脚和3脚

2)打开串口调试助手

3)点击自动发送,在自动发送的窗口中随便发个数据,看看能不能接收到若能接收到自己发的数据表示串口线是正常的,否则是坏的。

2、下完单片机程序后,看看串口是否有数据发出检测

3、单片机上与模块通信的4个灯表示的含义

1)DO灯

一直闪表示单片机串口与GSM模块串口通信不正常,否则串口通信正常

2)D1灯

灯亮就表示模块注册上网络,否则没有注册上网络

3)D2灯

灯亮表示开始发短信

4)D3灯

灯亮表示发短信结束

4、单片机板子与GSM模块的连接

单片机---------GSM模块

VCC--------vcc(P5的第3脚)

GND--------GND(P5的第4脚)

RX_232(表示单片机的发)----------RXDPC_232(模块的收(P5的第5脚))

TX_232(表示单片机的收)----------TXD_PC232(模块的发(P5的第6脚))

c2oSLFj+zGh29micFxcAsHnNR9Tj+gAxGycWnrtYEoJEX4cMs0chE96wIxlMsBTT838e4i2uzEHA

gsm模块和单片机连接

单片机连接GSM模块,直接就是把异步串行通信口的TX和RX连上就可以,别忘了地线。

注意事项:

1、不同的单片机有不同的电压,一般GSM模块的输入输出电平是2.85V,51系列的电平是5V,一般在51输出的TX那根线上串联2K的电阻,基本上可以使用。如果是3.3V的单片机,这个电阻就可以很小,几百欧姆就可以。

2、GSM模块本身的电源和SIM卡电路很麻烦,首先是大多数GSM模块都是用FPC40的接口,排线的间距只有零点五毫米,而且是塑料外壳,不好焊接。焊不好的话工作不稳定。其次是电源部分较麻烦,GSM模块的发射电流较大,最大瞬间电流2A!所以电源部分一般要用LM2576这种大电流的DC-DC变换器来提供4V的电压,DCDC电路设计本身就很不容易,个人应用比较难,需要做电路板。搭接的不稳定。还有SIM卡部分,SIM卡与GSM模块通信本身就是个复杂的高频过程,电路抗干扰能力强,我曾经试过用电线给它们连接起来,没有十分钟,就掉线了。所以SIM卡部分也需要精心设计,别看只有五根数据线而已。

单片机控制TC35GSM模块的方法

1、硬件连接

电路见下图只需设计一个TTL转RS232电平电路,连接到MCU的UART口,另一端直接连接到TC35。

7+KERDTN+wBl10Sp3J5ubvMbFs9u9nMLi9zBQ8Ag

2、指令输出的方法

单片机串口设置成模式1(9600,N,8,1),依次将AT+xxx以ASCII码形式输出到UART口;接收TC35的数据采用中断方式。这里给出详细的程序清单(Keil C51),不介绍编程的方法。程序见下:

//AT指令的定义

char code AT_Tc35[]=“AT+”; //连机

char code Bps_Tc35[]=“IPR=38400”; //波特率

char code Text_Tc35[]=“CMGF=1”; //文本模式

char code Read_Tc35[]=“CMGR=”; //读信息

char code Erase_Tc35[]=“CMGD=”; //删除信息

char code Send_Tc35[]=“CMGS=”; //发送信息

char code Creg_Tc35[]=“CREG?”; //注册

//模式设置

void UART_Init(void)

{

SCON=0x50; //01010000b=》1模式scon,#11011000b;

ES=l;

}

//发送-个ASCII

void SendASC(unsigned char ASC)

{

bit es;

es=ES;

ES=0;//关闭中断

TI=0;

SBUF=ASC;

while(!TI);

TI=0;

ES=es;

)

//发送命令到TC35

void SendToTc35(unsigned char* p,unsigned char Long)

{

while(Long--)

{

SendASC(*p++);

}

}

// 通讯中断接收程序

void Rs485_Do(void) interrupt 4 using 1

{

if(RI==l)

{

RI=0;

RsBuq[RsPoint++]=SBUF;

if fRsPoint》=sizeof(RsBuf))

{

RsPoint=0;//FlagRs485=0;

} //数据处理

}

}

// 发送AT连机命令

char code AT_Code[]=“OK”;

void Send_AT(void)

{

unsigned char *p;

while(1)

{

ClrRsBuf(RsBuf,sizeof(RsBuf));

SendToTc35(AT_Tc35,2); //“AT”

SendASC(OVER);

//************等待应答“ok“

ES=1; //必须中断

Delay(50);

P=strstr(RsBuf,AT_Code);

if(p!=NULL) break;

}

)

//发送bps连机命令

void Send_BPS(void)

{

SendToTc35(AT_Tc35,3); //”AT+“

SendToTc35(Bps_Tc35,sizeof(Bps_Tc35)-1);//”IPR=19200“

SendASC(OVER);

}

//设置文本

void SetText(void)

{

SendToTc35(AT_Tc35,3); //”AT+“

SendToTc35(Text_tc35,sizeof(Text_tc35)-1);//”IPR=19200“

SendASC(OVER);

Delay(100):

//删除短信息

unsigned char EraseMsg(unsigned char index)

{

unsigned char *p,i=20;

SendToTc35(AT_Tc35,3); //”AT+“

SendToTc35(Erase_Tc35,sizeof(Erase_Tc35)-1);//”IPR=19200“

SendASC(index);

SendASC(OVER);

ES=1;

while(i--)

{

Delay(200);

P=strstr(RsBuf,AT_Code);

if(P!=NULL) {return 1;}

}

return 0;

}

//读取短信息

char code Ask_No[]=”+CMGR:0,,0“;

char code ERROR{]=”ERROR“;

char code Ask_Tc35[]=”/“;

unsigned char ReadMsg(unsigned char index)

{

unsigned char *p,i;

unsigned char Buf[40];

SendToTc35(AT_Tc35,3); //”AT+“

SendToTc35(Read_Tc35,sizeof(Read_Tc35)-1);

SendASC(index);

SendASC(OVER);

ES=1; //必须中断

Delay(600);

/*-------

ES=0:

SendToTc35(RsBuf,99);

ES=1;

*/|

p=strstr(RsBuf,ERROR);

if(P!=NULL)

{

Send_AT();return 0;

p=strstr(RsBuf,Ask_No);//无信息

if(p!=NULL)return 0;

p=strstr(RsBuf,Ask_Tc35);//20个字节后是MSG

if(p==NULL) return 0;

p=p+21;

for(i=0;i《sizeof(Buf);i++)

{

Buf[i]=*p++;

}

if(EraseMsg(index)==0) return 0;

p=strcpy(RsBuf,Buf); //放回RsBuf

return 1;

)

//发送短信息

char code SK[]=”》“;

void SendMsgStart(void)

{

unsigned char *p,i=10;

SendToTc35(AT_Tc35,3); //”AT+“

SendToTc35(Send_Tc35,sizeof(Send_Tc35)-1);//”IPR=19200“

SendASC(YinHao);

SendToTc35(Mp1.Hand,sizeof(Mp1.Hand)); //”AT+“

SendASC(YinHao);

SendASC(OVER);

ES=1;

while(i--)

{

Delay(100); //Get”》“

p=strstr(RsBuf,SK);//”》“

if(p!=NULL)

{

ClrRsBuf(RsBuf,sizeof(RsBuf));

Delay(150); //Get”》“

break;

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

aws terraform_在AWS第1部分中使用Terraform自动缩放组:基本步骤

aws terraform因此,您想使用Terraform在AWS上创建一个自动缩放组。 以下是达到此目的的最少步骤。 在编写实际代码之前,应指定aws terraform提供程序以及provider.tf文件上的区域。 provider "aws" { version "~> 2.0" region …

java流与文件——java生成解压缩文件(夹)

【0】README 0.1) 本文描述转自 http://blog.csdn.net/chenssy/article/details/9622171 , 旨在理解 java流与文件——java生成解压缩文件(夹) 的相关知识; 0.2) for my diy source code, please visit h…

Java的系统Property

一、java 系统Properties修改 (1)System.getProperties()可以确定当前的系统属性,返回值是一个Properties; (2)System.load(String filename)加载文件中的属性Properties等同于:System.getProperties().load(String filename) (3)System.setProperties(Properties p…

android 发布最新系统更新包,安卓升级包(安卓补丁包更新)

安卓升级包(安卓补丁包更新)2021-02-08 15:39“固件升级”文石BOOX Android 6.0及以上型号都支持升级最新系统!好消息!截至今天,您在BOOX安卓6.0系统以上的所有阅读器型号,都支持升级到最新BOOX OS 2.3.1系统了!?的设…

apache.camel_Apache Camel 3.1 –更多骆驼核心优化(第3部分)

apache.camel我以前曾在博客中介绍过我们在下一个Camel 3.1版本中所做的优化 博客第1部分 博客第2部分 今天,我想简要介绍一下我们已经完成的最新开发,因为我们准备在本周末或下半年准备好构建和发布Camel 3.1。 从第2部分开始,我们设法在…

AVL树的单双旋转解析

【0】README 0.0) 本文部分idea 转自:http://blog.csdn.net/collonn/article/details/20128205 0.1) 本文专注于 解析 AVL 树的 单旋转(左左单旋转和右右单旋转) 和 双旋转(左右双旋转和右左单旋转&#…

List转数组toArray方法

一、List.toArray方法 List提供了一个将List转为数组的一个非常方便的方法toArray。toArray有两个重载的方法&#xff1a; Object[]toArray() 返回按适当顺序包含列表中的所有元素的数组&#xff08;从第一个元素到最后一个元素&#xff09;。<T> T[]toArray(T…

android定位会出现的问题,android – 使用GPS_PROVIDER进行定位时出现问题

使用&#xff1a;locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MINIMUM_TIME_BETWEEN_UPDATES,MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, locationListener);对于locationListener,您可以使用&#xff1a;LocationListener locationListener new Locati…

自底向上伸展树(之字形旋转+一字形旋转)

【0】README 0.1&#xff09; 本文总结于 数据结构与算法分析&#xff0c;核心剖析路线为原创&#xff0c; 旨在理清 自底向上伸展树&#xff08;之字形旋转一字形旋转&#xff09; 的基本思路&#xff1b; 0.2&#xff09; 自底向上伸展树 是基于 AVL树&#xff0c;for deta…

apache.camel_Apache Camel 3.1 –更多骆驼核心优化(第2部分)

apache.camel我以前曾在博客中介绍我们在下一个Camel 3.1版本&#xff08;第1部分&#xff09;中所做的优化 。 今天&#xff0c;我想发布大约4周后的状态更新。 我们集中在三个方面优化骆驼核心&#xff1a; 不必要的对象分配 不必要的方法调用 提高绩效 换句话说&#…

Util包中Arrays

java.util 类 Arrays java.lang.Object -java.util.Arrayspublic class Arrays extends Object此类包含用来操作数组&#xff08;比如排序和搜索&#xff09;的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。 除非特别注明&#xff0c;否则如果指定数组引用为 …

Android的sqlite使用外部,Android 使用外部已经建立好的sqlite数据库

最近项目需要通过电话号码查询归属地&#xff0c;决定直接在本地sqlite的数据库进行查询&#xff0c;没必要去访问网络(虽然最后还是决定还是将数据库放在服务器上)一 首先先将外部的sqlite数据库放入assets文件夹下面注意&#xff1a;必须是sqlite数据库(XXX.db)&#xff0c;如…

java流与文件——操作文件

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——操作文件 的相关知识&#xff1b; 0.2&#xff09; for source code, please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/ch…

阅读副本和Spring Data第2部分:配置基础项目

在上一篇文章中&#xff0c;我们使用相同的数据设置了多个PostgreSQL实例。 下一步将是使用这两个服务器来配置spring项目。 如前所述&#xff0c;由于我们使用完全相同的数据库&#xff0c;因此我们将使用Spring Boot JPA帖子中的一些代码。 这将是我们的gradle构建文件 pl…

java生成UUID通用唯一识别码

一、UUID概述UUID含义是通用唯一识别码 (Universally Unique Identifier)&#xff0c;这是一个软件建构的标准&#xff0c;也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份。 UUID 的目…

android 项目部署,Android发布项目到JCenter

JCenter是什么大家应该都用过各种各样的Github上的第三方开源组件。类似这种效果的compile wang.yuchao.demoforjcenterlibrary:DemoForJCenterLibraryModel:1.2.5我们会比较好奇Android Studio 是从哪里得到这个类库的&#xff1f;Android Studio是从build.gradle里面定义的Ma…

java流与文件——对象流和序列化

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——对象流和序列化 的相关知识&#xff1b; 0.2&#xff09; for source code , please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdva…

maven 版本号插件_测试Maven版本插件自动递增版本号

maven 版本号插件抽象 Maven版本插件是一个非常强大的工具&#xff0c;我在很大程度上依赖于它来协调软件版本。 通常&#xff0c;软件发行版本号遵循简单的1.0.0.0-SNAPSHOT格式。 但是最近我需要在版本号中添加一个限定符&#xff0c;例如1.0-beta-SNAPSHOT或1.0.0-fix-bug-d…

java中Date

在类 Date 所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中&#xff0c;将使用下面的表示形式&#xff1a;年份 y 由整数 y - 1900 表示。月份由从 0 至 11 的整数表示&#xff1b;0 是一月、1 是二月等等&#xff1b;因此 11 是十二月。日期&#xff08;一月中的某…

如何配置android的adb环境变量,如何配置adb环境变量?win7配置adb环境变量的方法...

本文教程小编分享就是win7系统配置adb环境变量的方法&#xff0c; windows7系统 电脑安装adb工具时&#xff0c;提示“adb不是内部或外部命令”这时候我们需要重新配置adb环境变量&#xff0c;那么win7系统怎么配置adb环境变量&#xff1f;网上介绍配置adb环境变量的方法比较少…