gsm模块电路图

gsm模块电路图,第1张

1 引言

随着通信技术的发展,基于移动通信网络的服务功能正向工业控制和遥控领域扩展。为了适应这种需要,西门子公司推出新一代TC35i型无线通信GSM模块,基于该模块的短消息功能,可以快速、安全、可靠地实现用户信息处理等功能,特别适用于控制中心与终端设备距离很远或不便采用有线通信介质的场合。该系统由控制中心和若干显示屏组成,控制中心实时将最新信息发送到各显示屏,构成控制中心与显示屏端的通信链路。

2 TC35i与单片机的硬件接口电路

TC35i可以快速安全可靠地实现系统方案中的数据、语音传输、短消息服务和传真。模块的工作电压为3.3 V~5.5 V,可以工作在900 MHz~1800MHz。模块有AT命令集接口,支持文本和PDU模式的短消息。此外,该模块还具有电话薄、多方通话、漫游检测等功能,常用工作模式有省电模式、I-DLE和TALK等模式。通过40引脚的ZIF连接器实现电源连接、指令、数据、语音信号及控制信号的双向传输。通过ZIF连接器及50 Ω的天线连接器可分别连接SIM卡支架和天线。

在控制系统中,采用AT89C51型单片机同时扩展RAM6264用于存放与显示屏对应的要显示的128 B数据以及从GSM模块读取的信息。为了增大存放数据的容量,本设计采用了AM29F040型FlashMemory(512 KB),它存储容量大、集成度高、成本低,具有灵活的读写性和较好的数据非易失性。它有15条地址线,其中低8位地址由P0口经74HC373锁存后提供,高11位地址由P2口与P1.4、P1.5、P1.6共同提供。8位数据由PO口直接提供。

采用动态扫描方式,用74HCl54及74HC595进行16行的逐行扫描,利用人眼的视觉暂留效果,可以节省I/O资源,减少发热量。

3 工作原理

如图l所示,在接收终端,单片机通过读取TC35i模块以短消息形式承载的数据,经处理后把它显示到 LED显示屏上。因为短信息中的汉字仅仅是1个编码,单片机应用系统将编码变为汉字点阵数据,必须配置汉字字库。因此,设计单片机应用系统时,控制中心编辑PDU数据包数据,采用自定义数据方式。其中,代表汉字的数据直接用汉字的机内码,系统配置的字库为GB-2312编码的汉字库,即区位码汉字库。下面通过对存储在手机中的待发信息的分析来介绍SMSPDU的数据格式。首先,用手机写一条信息,发送手机号码为13605696031,信息内容为 “HelloWorld!”。通过执行AT+CMGL=2可以读出此条信息。 *** 作过程如下(斜体字符为响应信息,{}内为注释): 单片机与手机的软件接口其实就是单片机通过与GSM短信息有关的AT指令控制手机的技术,如读取手机的短信息内容、删除短信息内容、列出手机中还未读的短消息等。执行l条指令,并非某些资料介绍的那么简单,事实上,指令的执行过程需要单片机与手机交互应答完成,每一次发送或接收的字节数有严格的规定,二者必须依据这些规定实现数据交换,否则,通信就是失败的。表l列出AT指令执行过程。 所有AT指令的指令符号、常数、PDU数据包等都以ASCⅡ编码形式传送,比如“A”的ASCⅡ编码为41H,“T”的ASCⅡ编码为54H,数字“0”的ASCⅡ编码为30H等。单片机控制手机工作,必须把手机的短信息工作模式设置为PDU格式,即通过指令AT+CMGF=0完成。单片机向手机发送每l条指令后,必须以回车符作为该条指令的结束,回车的ASCⅡ编码为ODH,例如单片机向手机发送“AT+CMGF=0"指令,其ASCⅡ编码列为“41H、54H、2BH、42H、4DH、47H、46H、3DH、30H、0DH”,最后1个字节0DH就是回车符,表示该条指令结束,如果没有这个回车符,手机将不识别这条指令。当手机接收到一条完整的AT指令后,手机并不立即执行这条指令,而是首先把刚才接收到的AT指令的全部ASCⅡ编码序列全部反发送出来(含ODH),其次发送1个回车符和换行符的ASCⅡ编码即0DH和OAH,最后执行该条指令。手机向单片机发送短信息内容时,其PDU数据包的内容是16进制表示的数据,但并不是直接向单片机传递16进制数据,而是仍然把每一位16进制数以ASCⅡ编码来发送,这样,2个字节的16进制数就变成4个字节的ASCⅡ码。但是,PDU数据包中的数据字节长度部分仍然是实际字节长度,而不是变成ASCⅡ码的字节长度,这在编程时应特别注意,否则,接收的数据就不完整。单片机接收到PDU数据包数据后,必须将其恢复成16进制数据,其算法如下:设a为接收的ASCⅡ码.b为转换后的16进制数,那么,如果a<39H,则b=a-30H;如果a>39H,则b=a-30H-07H。最后把前后2个数合并为1个字节。 你在去核实下 !应该是 完全的对 ! 谢谢采纳!

1.第一个明显错误,就是phone[i] =SBUF这句是读串口,发串口是SBUF=phone[i]

2.for循环中循环内容应该包含串口发送和检测串口是否发送完语句,每发送一个数据就要使用while(TI=0)而不是想象中的所有数据发完才检测TI。建议如果对编程不熟请给每一个循环都使用大括号!不要偷懒,比如你的for循环,加上大括号避免错漏循环体!

可以使用一下子程序作为串口发送数据

void UART_SendDat(unsigned char dat)//参数为发送的数据

{

SBUF=dat

while(!TI)

TI=0

}

发送AT指令的程序可封装为

void Send_ATCMD(unsigned char cmd[],unsigned char Count)//参数为发送的AT指令数组,数组长度

{

unsigned char i

for(i=0i<Counti++)

{

UART_SendDat(cmd[i])

}

}

3.表示字符表单引号'A'而不是双引号“A",双引号表示字符串,里面含有字符串结束符'\0';

4.串口初始化程序,请加上,以子程序形式封装

5.GSM初始化和配置指令,请加上,以子程序形式封装

6.一点建议,在main函数中最好都是一些子程序调用而不要直接出现像你写的那些语句,你的那种写法可读性和排错性都较差

GSM模块,是将GSM射频芯片、基带处理芯片、存储器、功放器件等集成在一块线路板上,具有独立的 *** 作系统、GSM射频处理、基带处理并提供标准接口的功能模块。

GSM模块具有发送SMS短信,语音通话,GPRS数据传输等基于GSM网络进行通信的所有基本功能。简单来讲,GSM模块加上键盘、显示屏和电池,就是一部手机。

开发人员使用ARM或者单片机通过RS232串口与GSM模块通信,使用标准的AT命令来控制GSM模块实现各种无线通信功能,例如:发送短信,拨打电话,GPRS拨号上网等。基于GSM模块产品的开发往往都是基于ARM平台,使用嵌入式系统进行开发。

所以,搞GSM报警,必须做实物,用STM32单片机。想用proteus仿真几乎不可能,proteus里没有GSM模块,而实物模块却无法与电脑上proteus相结合。退一万步讲,假如用proteus能做出来,可这报警却不能独立应用,还必须配一台电脑,这都是什么思维方式。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11464297.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存