当前位置:文档之家› 单片机控制GSM模块实现短信收发的软件设计

单片机控制GSM模块实现短信收发的软件设计

单片机控制GSM模块实现短信收发的软件设计
单片机控制GSM模块实现短信收发的软件设计

■ 武汉理工大学 王骐 何嘉斌

摘 要关键词借助系统模型,阐明GSM模块收发短信的基本概念以及串口控制SMS的基本原理。详细介绍单片机控制GSM模块工作的软件实现过程,对怎样用单片机控制GSM模块收发短信进行探讨,也对程序设计的主体思想作了较为细致的分析。

单片机 短信收发 软件设计

GSM(Global System for Mobile communication)系统是目前基于时分多址技术的移动通信体制中,比较成熟完善,且应用最广泛的一种系统。目前已建成的覆盖全国的GSM数字蜂窝移动通信网,是我国公众移动通信网的主要方式。基于GSM的短信息服务,是一种在移动网络上传送简短信息的无线应用,是一种信息在移动网络上储存和转寄的过程。由于公众GSM网络在全球范围内实现了联网和漫游,建立上述系统不需再组建专用通信网络,所以具有实时传输数据功能的短信应用将得到迅速普及。笔者开发设计的基于GSM网络的温度数据采集与无线传输系统正是借助该网络平台,利用短信息业务实现数据的自动双向传递。系统模型图如图1所示。

本系统由数据采集部分、数据接收和发送部分、终端处理部分三个模块组成。数据采集模块将采集到的温度数据存入存储器中。数据收发模块采用双单片机共用E2RPOM的方式,单片机2控制数据从存储器转存入E2PROM中;单片机1负责将数据从E2PROM中读出,并经GSM模块2借助GSM网络将数据发送出去。单片机1不仅控制数据的发送,也控制数据的接收。在这里,E2PROM是温度数据临时存储和上传的中转站。终端处理模块负责将接收到的数据交给计算机处理,并将处理后的结果存放到数据库中,以供查询。当终端处理模块需要向GSM模块2发送控制命令时,GSM模块2接收过程正好与上述过程相反,从而实现数据的自动双向传递。

系统中,三个模块相互独立,彼此又相互依赖,共同完成数据的传输。数据收发模块在系统中起着承上启下的作用,是系统的核心模块。该模块以双单片机为核心,以RS232通信接口,在物理层上实现与GSM模块的连接。由于篇幅的限制,本文主要介绍单片机控制这一模块工作的软件实现过程,旨在对怎样用单片机控制GSM模块收发短信息进行探讨。

1GSM模块MZ28

MZ28是中兴通讯推出的GSM无线双频调制解调器,主要为语音传输、短信发送和数据业务提供无线接口。MZ28集成了完整的射频电路和GSM的基带处理器,特别适合于迅速开发基于GSM无线网络的无线应用产品。带有人机接口(MMI)界面的应用产品内部与MZ28的通信可通过标准的串行接口(RS232)进行。MZ28使用简单的20-PIN ZIP插座与用户自己的应用系统相连,此ZIP连接方式提供开发所需的数据通信、音频和电源等接口信号。MZ28可以作为无线引擎,嵌入到用户自己的产品当中,用户可以用单片机或其它CPU的UART口,使用相应的AT命令,对模块进行控制,达到使其产品可以轻松进入GSM网络的目的。

2串口控制SMS的工作原理

单片机与GSM模块一般采用串行异步通信接口,通信速度可设定,通常为19200bps。采用这种RS232电缆

终端处理模块

图1 系统模型图

单片机控制GSM模块实现短信收发的软件设计※

方式进行连接时,数据传输的可靠性较好。RS232接口方式连接,通过串行接口集成电路和电平转换电路与GSM模块连接,电路比较简单,所涉及的芯片包括单片机89C52和电平转换芯片MAX232,是非常常见的接口电路。需要说明的是,该接口通过I2C总线扩展了一个E2PROM存储器芯片AT24C64,它的主要作用是存储采集到的数据。该芯片能够反复擦/写,能够持久保存数据,而且断电信息也不会丢失,这些特性正是存储数据所必须的。

GSM的短信息业务SMS利用信令信道传输,这是GSM通信网所特有的。它不用拨号建立连接,把要发的信息加上目的地址发送到短信息服务中心,经短信服务中心完成存储后再发送给最终的信宿。所以当目的GSM终端没开机时信息不会丢失。每个短信的信息量限制为160字节。

现在市场上大多数手机均支持GSM07.05规定的AT指令集。该指令集是ETSI(欧洲通信技术委员会)发布的,其中包含了对SMS的控制。利用GSM手机的串行接口,单片机向手机收发一系列的AT命令,就能达到控制GSM模块收发SMS的目的。必须注意的是,用单片机实现时,编程必须注意它发送指令与接收到的响应都是字符的ASCII码。用单片机控制GSM模块收发短信息所涉及到的AT指令如表1所列。

3软件实现

3.1上位机模块和下位机模块半双工通信协议的实现3.1.1应答和重发

上位机模块和下位机模块的通信双方遵照半双工通信方式进行,即数据传送是双向的。但是,任何时刻只能由其中的一方发送数据,另一方接收数据,因为E2PROM的读出和写入不能同时进行。为了避免一方在发送信息帧时(这里的信息帧指的是下位机模块发送的数据帧和上位机模块发送的命令帧,下同),另一方也会发送数据,必须把信道变成半双工方式。尽管这样效率可能不如全双工方式,但通过此举牺牲效率可以换取模块工作性能的稳定。双方采取的顺序是:发→收到应答后→再发。

按照整个系统的设计思路,上位机模块(即图1中的GSM模块1,下同)发送的帧包括命令帧、确认帧和非确认帧;下位机模块(即图1中的GSM模块2,下同)发送的帧包括数据帧、确认帧和非确认帧。其中确认帧和非确认帧是发送数据后等待对方发送的应答帧,以此作为继续发送下一帧和重新发送上一帧的依据。命令帧和数据帧是信息帧。当一方先发送完信息帧,如果收方接收到对方的信息帧,而又没有信息帧需要发送,那么情况就比较简单,收方将根据信息帧的正确与否决定发送确认帧还是非确认帧,以使对方决定是继续发送还是重新发送;如果此刻收方也有信息帧需要发送,那么收方将不立即发送应答帧,而是立即发送本方的信息帧给对方,并等待对方对此帧的应答帧,在收到对方的应答帧后,收方将依据应答帧的内容(即确认帧或者是非确认帧,下同)决定是继续发送下一信息帧,还是重新发送原来的信息帧。如果由于链路本身不可靠等因素造成应答帧的丢失,收方将在一定时间内因为没有收到应答帧而延时重发原来的信息帧。在收到对方的应答帧后,收方将继续发送下一信息帧,并等待对方的应答帧,如此反复,直到收方全部发送完信息帧。在本方收到对方最后一个应答帧后,表明本方全部的信息帧发送完毕。然后收方将发送对方仍然等待的应答帧,通知对方收到的信息帧正确与否。

3.1.2延时重发

在双方通信过程中,有两个时间t1和t2,分别表示重新发送信息帧的最大延时。t1表示一方发送完信息帧到收到对方应答帧的时间,如果等待应答帧的时间超过了t1,则发方会重新发送原来的信息帧;当收方接收到对方发送的信息帧,如果收方此时有需要发送的信息帧,则收方此刻不发送应答帧,而是发送信息帧给对方。也就是说,利用对方等待收方应答帧的时间t1内,收方插入发送本方的信息帧,同样本方的发送也存在一个延时重发的问题。在规定的时间内,如果没有收到对方应答帧,收方也同样需要重发原来的信息帧,这个规定的时间就是t2。显然由于收方是利用间隙时间发送本方信息帧,所以t2<t1。

图2以下位机模块先发数据帧为例,阐述双方通信的具体实现过程。

需要说明的是,由于版面的限制,图2所示的通信过程没有涉及到发送非确认帧的情况,如果收方发送非确认帧,发方的发送过程跟发送数据帧是一样的,只不过这种情况下需要重发同一帧号的数据帧。如果上位机模块先发命令帧,双方通信的实现过程跟图2类似,所

表1 AT指令 

A T指令功能描述

AT+OFF 关机并重新启动

AT+CSDH=0 在TEXT模式下在返回值中不显示详细的头信息ATE0 关闭回显

AT+CMGF=1 选择短信格式为TEXT模式

AT+CMGS 发送短信息

AT+CMGR 读取短信息

AT+CMGD=0 删除全部短信息

不同的是数据帧此时变成命令帧,命令帧变成数据帧。在延时的时间上,无论是下位机先发送数据帧还是上位机先发送命令帧,t2的大小都应该是一样的,都是利用时间间隙t1发送收方信息帧,延时的时间是相同的。然而,对于t1而言,情况就有所不同。因为下位机模块先发送数据帧时,利用t1的间隙时间上位机模块发送的命令帧可能较少,因此当下位机模块先发送数据帧时所定义的t1应该小于当上位机模块先发送命令帧时,所定义的t1。这是因为当上位机模块先发送命令帧时,利用t1的间隙时间下位机模块发送的数据帧可能比较多。3.2帧格式

GSM模块通过异步通信接口实现对SMS的控制共有三种接入协议:Block Mode;基于AT指令的TextMode;基于AT指令PDU Mode。本系统发送和接收的数据都是基于数字的温度数据和命令字,为了保证系统的适用性,SMS的收发采用TEXT模式。TEXT模式是基于字符的,更具体地说是基于ASCII码的一种结构模式。在该模式下,模块发送和接收的信息帧格式如下。

信息帧包括数据帧和命令帧。

帧头表示数据帧的标记,是由固定的字符“WQ”构成。

帧序号表示数据帧的序号,由两个字节组成。帧序号表示下位机模块发送的递增数据帧序号和上位机模块发送的命令帧序号。为了简化帧结构,命令帧的序号统一为00H。

数据字段的长度为154字节,最多发送77个字符(采用TEXT模式,不能发送汉字)。

检验子为数据字段所有字节累加和的补码(原码取反加1),由一个字节组成。

在整个帧结构中,帧头字段是由两个固定的字符组成,这两个字符都可以通过模块直接发送。在帧序号、数据、校验子三个字段中,都存在这样一个问题:这三个字段都可能要发送某些模块不能直接发送的字符,比如00H等。为此采取了一种编码方案,将高低4位分别加上40H,拆成两个字节进行发送,比如要发送00H,

那么模块会发送

40H、40H。当然,很

多字符都是可以直

接发送的,为了程

序算法的简便,将

所有要发送的字符统一进行这种“一拆二”的编码方案。因此,这三个字段实际的字节数经过编码后都会扩大2倍。TEXT模式下,一次能发送的字符数是160个字节,它是由帧头(2字节)+帧序号(2字节)+数据(154字节)+校验子(2字节)构成的。

除了信息帧外,双向传送的还有应答帧,它包括确认帧和非确认帧。确认帧是收方反馈给发方的应答帧,表示收方已经正确接收到了发方发送的信息帧。确认帧格式仅包括两个字段,且两个字段的内容都是固定的,即帧头“WQ”和数据字段“ACK”,确认帧格式如下。

非确认帧是收方反馈给发方的应答帧,表示收方收到的是无效的信息帧,其格式与应答帧格式类似,帧格式如下。

3.3E2PROM空间的分配

采用8KB

的E2PROM,按

照每77个字节

为一个块进行

划分,共106块,

如图3所示。

第00、01

块留作系统使

用,第02块~第105块是数据块,用作存放数据。3.4收发端与采集端的握手协议

收发端与采集端共用一个存储器,即双CPU对同一个E2PROM进行操作。实现方案是分别使两个微处理器的一个I/O脚相连,两个CPU采用查询方式对此I/O端进行查询。如果某时候收发端查询到本地I/O端为高电平,则单片机1拥有此存储器的操作权,可以对E2PROM进行读写操作。如果采集端查询到本地I/O端为高电平,则单片机2拥有此存储器的操作权,可以对它进行写操作。一方操作完毕后将I2C总线置为高电平,表明本端已经释放I2C总线,E2PROM目前处于可用状态。

上位机模块

t2

t

图2 双方通信的实现过程

帧头帧序号数据校验子

WQ ACK

WQ NACK

图3 E2PROM空间的分配

00: 系统使用

104: 数据块

105: 数据块

0000H~0076H

0077H~00EDH

1F89H~1FFFH

1F12H~1F88H 01: 系统使用

……

3.5

程序的设计

3.5.1主函数的设计思路

开机上电后,程序在主函数中运行,单片机和GSM模块分别进行初始化。单片机的初始化包括设置串口工作方式、波特率,并初始化变量参数和标志位。GSM模块初始化包括重新启动、关闭回显、设置在TEXT模式下在返回值中不显示详细的头信息、选择短信格式为TEXT模式、开发串口中断准备接收数据。3.5.2GSM返回参数的处理-SHELL函数

SHELL函数是进入时钟中断程序时被调用的,该函数是对GSM模块返回参数进行处理的函数。根据系统设计的要求,需要对GSM模块进行下列操作:呼叫对方模块号码、发送数据、阅读短信、删除短信。基于以上操作指令,如果操作成功GSM模块会分别返回不同的参数:>、+CMGS、+CMGR、OK。根据接收到的不同参数,下位机模块将转向不同的操作步骤,判断并改变标志位的值。比如,如果某时刻接收到>,这表明呼叫对方模块号码获得成功,接下来需要发送数据。这时SHELL函数将检查发送不同数据所代表的标志位f_sending、f_ack、f_nack,从而决定需要发送何种类型的数据。

3.5.3短信数据的处理-ExecData函数

进入时钟中断调用SHELL函数时,如果接收到了返回的参数+CMTI,表明上位机模块向下位机模块发送了短信数据,可能是命令帧,也可能是确认帧或者非确认帧。在这种情况下,SHELL函数需要对短信内容进行分析,并根据短信的内容进行不同的处理,

负责完成以

上功能的就是ExecData函数,它是被SHELL函数调用的,用来分析并处理短信数据。

结 语

通过以上的分析不难发现,整个程序错综复杂,函数之间相互牵扯。标志位在程序的实现过程中扮演着非常重要的角色,正是依靠这些标志位,程序才能很好地实现各个功能之间的切换,而标志位的值是通过GSM模块返回的参数修改的。因此程序的实现过程应该是:阅读参数→修改标志位→发送指令。

主函数、时钟中断和串口中断程序、SHELL函数、ExecData函数贯穿整个程序的主线和核心部分,对它们的分析可以理解程序的主体思想,这也正是笔者着重介绍的原因所在。然而这些函数和中断程序的实现,还需要依靠其它函数的配合,比如基于I2C总线的E2PROM操作函数、字符串操作函数以及串口发送函数等,由于篇幅所限,在此不再介绍。GSM网络本身是不完全可靠的,可能会发生帧发送错误、帧丢失的现象。但是由于重发、延时重发机制的存在,程序可以最大程度避免上述情况的发生。在实际应用过程中,模块运行正常,性能稳定,实时性好。

注:全文见本刊网站www.dpj.com.cn。

参考文献

1MZ28硬件接口说明书 ,20032MZ28 AT命令说明书 ,2003

的DOS文件系统,簇的大小是2KB,如果要向CF

卡中写入一个8MB的文件,共占用4K个簇,出于可靠性考虑,每写一个簇,FAT表就更新一次,写一个8MB的文件,FAT表需要更新4096次;而FAT表一直位于某个固定扇区中,所以8MB的文件最多只能更新25次,此时FAT表所在扇区已经擦写了10万多次。如果这是一个每天需要备份的文件,那么CF卡的寿命只有25天。这种应用方式使CF卡寿命与其容量无关,其它绝大部分可用扇区白白浪费。

采用了TrueFFS系统之后,因为损耗均衡算法不允许FAT表固定在某个扇区中,损耗平均分配给所有物理扇区。期望的CF卡寿命可以用下列公式计算:

每天写入字节数总擦写次数容量期望寿命75

.0××=

其中,0.75表示文件系统和TrueFFS管理结构的额外消耗系数。如果同样每天备份一个8MB文件,那么

8MB

0.75

000100MB 64××=

期望寿命=600 000(天)(约1643年)。

可见,TrueFFS惊人地延长了Flash器件的寿命。VxWorks自带的TrueFFS驱动器覆盖了业界大部分主流Flash芯片,考虑了各种芯片的不同擦写算法,效率较低。对于实时性要求苛刻的系统,开发人员应该按照所用的Flash器件有针对性地制作TrueFFS驱动器。目前,某些CF卡本身实现了一定程度的损耗均衡算法,但是没有TrueFFS那么高效。

参考文献

1Windriver Inc. VxWorks Programmer’s Guide, 20022M-Systems Inc. TrueFFS Wear-Leveling Mechanism, 20023SST Inc. Compact Flash Card SST48CF064 Data Sheet, 20014王江,茅静芳. 嵌入式处理器MPC8250和CF卡的接口设计.电子技术应用,2003(11)

(收稿日期:2004-07-21)

单片机控制sim900a收发短信

单片机接受指定短信内容,1602显示短信内容,单片机对短信内容作判断,若为所要求的内容,则返回一条短信 #include //单片机头文件 #include #include "lcd1602_drv.h" #define uchar unsigned char #define uint unsigned int #define Rx_data_length 110 uchar Admin_num[11]="xxxxxxxxxxx"; //手机号码 uchar i,j; bit Response_receive_SMS_flag=0; sbit RS_1602=P2^6; //1602数据/命令选择引脚sbit LCD_RW=P2^5; //1602读写引脚 sbit E_1602=P2^7; //1602使能引脚 uchar Rx_bit,i; uchar xdata Rx_data[Rx_data_length]; uchar w[]="Waiting ...... "; void Response_receive_SMS(void); void Uart_SendChar(uchar ch); void Uart_SendString(uchar *String); void uart_init(void); void Clear_Rxdata(uchar length); void delay(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=100;j>0;j--); } void main(void) { uint aa=0; EA=1; //开总中断 LCD_RW=0; //LCD RW 主程序接地一直等于0 uart_init(); //串口初始化 lcd_init(); //液晶屏显示初始化 Rx_bit=0; Uart_SendString("AT+CLIP=1\r\n");

基于单片机的短信收发系统设计-毕业设计

基于单片机的短信收发系统设计 前言 SMS(Short Message Service)短信息服务是GSM(Global System for Mobile Communication)系统中提供的一种GSM终端(手机)之间,通过服务中心(Service Center)进行文本信息收发的应用服务,其中服务中心完成信息的存储和转发功能。短信息服务作为GSM网络的一种基本业务,已得到越来越多的系统运营商和系统开发商的重视,基于这种业务的各种应用也蓬勃发展起来。以GSM网络作为数据无线传输网络,可以开发出多种前景极其乐观的各类应用,如无线数据的双向传送、无线远程检测和控制等。典型的应用有:变电站、电表、水塔、水库或环保监测点等监测数据的无线传输和无线自动警报;远程无线控制高压线路断路器、加热系统、防洪拦阻系统或其它机电系统的启动和关闭;车队交通管理和控制指挥系统;控制和监测香烟、食品和饮料自动售货机的运行状态和存货水平;远程加点控制等等。鉴于此,本文对基于单片机的短消息收发系统进行了设计研究。 1 系统模型 中国联通数字移动电话(GSM)网是向社会公众提供通信服务的公用通信网,与中国电信网同为国家通信网的有机组成部分。两网互联互通,自动接续,共享国家通信资源。目前,中国联通数字移动电话业务由GSM网130、131业务和CDMA网133业务组成。基于GSM的短信信息服务,是一种在移动网络上传送简短信息的无线应用,是一种信息在移动网络上存储和转寄的过程。本软件的设计基于GSM网络的温度数据采集与无线传输系统正是借助该网络平台,利用短信息业务实现数据的自动双向传递。系统模型图如图1-1所示。 本系统由数据采集部分、数据接收和发送部分、终端处理部分三个模块组成。数据采集模块将采集到的温度数据存入存储器中。数据收发模块采用双单片机共用EERPOM 的方式,单片机2控制数据从存储器转存入EEPROM中;单片机1负责将数据从EEPROM 中读出,并经GSM模块2借助GSM网络将数据发送出去。单片机1不仅控制数据的发送,也控制数据的接收。在这里,EEPROM是温度数据临时存储和上传的中转站。终端处理模块负责将接收到的数据交给计算机处理,并将处理后的结果存放到数据库中,以供查询。当终端处理模块需要向GSM模块2发送控制命令时,GSM模块2接收过程正好与上述过程相反,从而实现数据的自动双向传递。

基于单片机的短信收发系统简介

基于单片机的短信收发系统设计 摘要 本设计主要研究如何由单片机控制GSM模块实现短消息收发。系统设计包括硬件电路部份和软件部份。其硬件部分主要对通信模块TC35、单片机以及它们的外围电路、串行通信进行了描述和设计。借助系统模型,介绍了GSM网络和短消息在现阶段的应用情况,并对短消息的关键技术给予说明。软件设计主要包括上位机开发和单片机程序。本文给出了单片机控制GSM模块的软件流程图及程序,在本文最后给出了上位机开发过程的一般步骤和程序段。 关键词:单片机;TC35;GSM;SMS Abstract This design mainly studies the GSM module which is controlled by the MCU to realize sending and receiving short messages. It includes hardware and software’s designing. In this paper, the hardware part mainly introduces the TC35 communication module, microcomputer with its peripheral circuits and the serial communication in detail. It not only introduces the applying situation of the GSM network and short messages in the present stage with the help of system model, but makes an illustration on sh ort message’s key technique. The software section mainly discusses the design of the PC orders ,MCU programmes and the flow process diagram of GSM module. At last , the general steps of developing and program blocks are presented,too. Key Words: MCU; TC35;GSM;SMS 一、绪论 SMS(Short Message Service)短信息服务是GSM(Global System for Mobile Communication)系统中提供的一种GSM终端(手机)之间,通过服务中心(Service Center)进行文本信息收发的应用服务,其中服务中心完成信息的存储和转发功能。短信息服务作为GSM网络的一种基本业务,已得到越来越多的系统运营商和系统开发商的重视,基于这种业务的各种应用也蓬勃发展起来。以GSM网络作为数据无线传输网络,可以开发出多种前景极其乐观的各类应用,如无线数据的双向传送、无线远程检测和控制等。典型的应用有:变电站、电表、水塔、水库或环保监测点等监测数据的无线传输和无线自动警报;远程无线控制高压线路断路器、加热系统、防洪拦阻系统或其它机电系统的启动和关闭;车队交通管理和控制指挥系统;控制和监测香烟、食品和饮料自动售货机的运行状态和存货水平;远程加点控制等等。鉴于此,本文对基于单片机的短消息收发系统进行了设计研究。 二、系统方案设计 本系统由数据接收和发送部分、单片机控制部分、终端处理部分三个模块组成。数据收发模块采用德国西门子的TC35通讯模块。单片机负责将数据从内存中读出,并经GSM模块(TC35)借助GSM网络将数据发送出去,单片机控制数据的发送,也控制数据的接收。在这里单片机内存是数据临时存储和上传的中转站。终端处理模块(PC机)负责将接收到的数据进行处理,并将处理后的结果存放到数据库中,以供读取和查询。 系统中三个模块相互独立,彼此又相互依赖,共同完成数据的传输。单片机在系统中起着承上启下的作用,是系统的核心模块。单片机与GSM模块一般采用串行异步通信接口,通信速度可设定,通常为9600bps。单片机与上位机采用RS232电缆方式进行连接,当采用这种连接时数据传输的可靠性较好。在进行RS232接口方式连接时通过扩展的串行接口和电平转换电路与上位机连接。单片机与通讯模块的通信双方遵照半双工通信方式进行。即数据传

基于单片机的短信收发系统毕业设计论文

本科毕业设计(论文)题目:基于单片机的短信收发系统设计

Graduation Design The Design Of Messaging System Based On MCU By Wang Hui Supervised by Lecture. SHI Xinxin School of Automation Nanjing Institute of Technology June, 2015

摘要 随着手机的广泛使用,GSM网络提供的短消息服务使得只需要增加少量投入便可以通过手机实现生活和生产中的远程控制和告警通知成为可能。 本设计是基于ARM Cortex-M3内核的32位单片机STM32的一种短信收发系统。本系统主要实现中英文短信收发及TFT彩屏显示相关状态如短信未读、已读状态、短信发送状态和内容如要读取短信数、读取到的短信内容、时间、发件人手机号码等,并且可以实现通过TFT液晶屏触摸输入号码和功能按键如读取、返回、拨号、挂断、删除等。此方案以ST公司32位单片机STM32F103ZET6为主控制器辅以GSM/GPRS模块SIM900A,64Mb串行Flash 存储器W25Q64,2K串行EEPROM AT24C02,TFT液晶屏ILI9320等硬件,通过C语言编写程序,用软硬件结合的方法实现其基本功能。经过多次实践测试,本系统可以达到预期的稳定性、可靠性,可以应用在远程控制、智能家居、工业控制等领域。 关键词:SIM900A;STM32;短信;GSM;TFT液晶屏

ABSTRACT With the widespread use of mobile phones, short message services provided by the GSM network make it possible that only a slight increase in investment and production will be able to live in the remote control and alarm notification via cell phone. In this thesis , a messaging system base on the 32-bit MCU STM32 which is based on the core of Cortex-M3 by ARM is discussed.The system is mainly a Chinese and English text messaging and that TFT color screen displays the status of messages such as unread, read status, SMS status and content, such as the number of messages to be read, read the message content, time, sender's phone number, etc. and can be achieved by TFT LCD touch screen to input the number and function keys such as reading, return, dial, hang up, delete, and so on.This program selects ST company's 32-bit MCU STM32F103ZET6 as controller supplemented GSM / GPRS module SIM900A, 64Mb Serial Flash memory W25Q64,2K serial EEPROM AT24C02, TFT LCD ILI9320 hardware, through C language programming,and achieve its basic functions with the combination of software and hardware.After several practice tests, the system can achieve the desired stability, reliability, and can be used in remote control, smart home, industrial control and other fields. Key words:SIM900A; STM32; messaging; GSM; TFT screen

基于51单片机控制红外通信

红外通信原理 红外遥控有发送和接收两个组成部分。发送端采用单片机将待发送的二进制信号编码调制为一系列的脉冲串信号,通过红外发射管发射红外信号。红外接收完成对红外信号的接收、放大、检波、整形,并解调出遥控编码脉冲。为了减少干扰,采用的是价格便宜性能可靠的一体化红外接收头(HS0038,它接收红外信号频率为38kHz,周期约26μs) 接收红外信号,它同时对信号进行放大、检波、整形得到TTL 电平的编码信号,再送给单片机,经单片机解码并执行去控制相关对象。具体实现过程如下: (在这里特别强调:编码与解码是一对逆过程,不仅在原理上是一对逆过程,在码的发收过程也是互反的,即以前发射端原始信号是高电平,那接收头输出的就是低电平,反之亦然。因此为了保证解码过程简单方便,在编码时应该直接换算成其反码。)

1.红外发射部分: 下图为红外发射部分的电路拟图: 编码过程: (1) 二进制信号的调制 二进制信号的调制由单片机来完成,它把编码后的二进制信号调制成频率为38kHz的间断脉冲串(用定时器来完成),相当于用二进制信号的编码乘以频率为38kHz的脉冲信号得到的间断脉冲串,即是调制后用于红外发射二极管发送的信号。 (2)PPM编码

这种遥控编码具有以下特征: ○1遥控编码脉冲由前导码、16 位地址码(8位地址码、8 位地址码的反码)和16 位操作码(8 位操作码、8 位操作码的反码)组成。前导码:是一个遥控码的起始部分,由一个9ms的高电平( 起始码) 和一个4. 5ms的低电平( 结果码)组成,作为接受数据的准备脉冲。16位地址码:能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。 16 位操作码:用来执行不同的操作。 ○2采用脉宽调制的串行码,以脉宽为0.56ms、间隔0.56ms、周期为1.12ms的组合表示二进制的“0”;以脉宽为1.68ms、间隔0.56ms、周期为2.24ms的组合表示二进制的“1”。 (3)发送程序 #include

C51单片机控制sim900a收发信息c语言程序

#include #include #include "STC12C5A60S2.h" //! 服务器IP地址与端口号,注意,用户需要将此IP替换为 //! 自己服务器的公网IP地址 #define TCPIP_SERVER_IPADDR "115.171.51.103" #define TCPIP_SERVER_PORT "8088" //! 串口发送与接收缓冲区大小 #define TTY_MAX_BUFFER_SIZE 256 //! 串口发送与接收缓冲区 char ttyBuffer[TTY_MAX_BUFFER_SIZE]; //! TCPIP发送与接收缓冲区大小 #define TCPIP_MAX_BUFFER_SIZE 256 //! TCPIP发送与接收缓冲区 char tcpipBuffer[TCPIP_MAX_BUFFER_SIZE]; //! 串口0初始化函数, 此串口用作接收终端控制命令 //! 晶振频率:22.1184MHz //! 串口0波特率:9600 void Uart0_Init(void) //9600bps@22.1184MHz { PCON |= 0x80; //使能波特率倍速位SMOD SCON = 0x50; //8位数据,可变波特率 AUXR |= 0x40; //定时器1时钟为Fosc,即1T AUXR &= 0xfe; //串口1选择定时器1为波特率发生器TMOD &= 0x0f; //清除定时器1模式位 TMOD |= 0x20; //设定定时器1为8位自动重装方式TL1 = 0x70; //设定定时初值 TH1 = 0x70; //设定定时器重装值 ET1 = 0; //禁止定时器1中断 TR1 = 1; //启动定时器1 } //! 串口0字符串输出函数 //! 参数说明:pString为字符串缓冲区首地址 void Uart0_PutString(char* pString) { unsigned short i = 0; while(pString[i]) {

PIC单片机I-O口单线通讯的实现

PIC单片机I/O口单线通讯的实现 中、低档PIC单片机有些不带串口,有些虽然有串行口,却受串口固定协议的限制或留作他用,故需用普通I/O口进行通讯。由于中、低档机I/O口数量相对较少,为节省口线,就要用I/O口模拟串行通讯。 本文以两片采用不同主频的PIC单片机(A机时钟频率为6MHz,使用口线RB6;B机时钟频率为4MHz,使用口线RB4)之间用异步通讯方式传送一组数据为例,说明I/O口一线通讯的实现方法。 一、设计思想 1.时钟同步问题 因两个单片机的时钟不同,故采用异步通讯方式。发送、接收一位数据时,采用软件延时,保证发送、接收完全同步。 2.数据发送、接收方式 I/O口一线串行通讯,并-串(或串-并)转换用软件完成。将欲发送的字节存于16H中,经移位指令移至进位位。根据进位位的值,将口线RB6置0或1。接收端RB4接收并判断后,置进位标志为0或1,再经移位指令移入14H中。这样循环执行8次,就可将一个字节由低位到高位一位位地发送出去。数据传送速率可用延时循环的方法进行调节。 3.握手协议 先发握手信号,后发数据。假定A机为发送,B机为接收。A机开始发送时,先发送一个握手数据信号,B机收到后回送一个应答信号,表示同意接收。 A机收到应答信号后,开始发送数据。握手信号和数据信号都按异步通讯格式,先发准备信号“1”,接着发送起始位“0”,然后发数据位。 4.数据传送 异步通讯时,发送时钟控制数据位的定时移位串行输出,接收时钟检测起始位,并控制数据的定时接收移入。两个时钟信号不是通过信号线传递,而是采用编程约定的办法,使之和实际使用的数据速率基本保持一致,而数据信号中的起始位则是发和收的同步控制。接收时钟为数据传送波特率的16倍频信号,即一个数据位宽的时间内将会出现16个接收时钟的信号,这是检测起始位和保证在数据位中央位置接收数据所需要的。为排除瞬时干扰,在检测到数据输入线的电平由“1”变为“0”之后,接收端将继续检测。仅当连续8个接收时钟周期内都检测到数据线上的电平为“0”时,才确认是起始位,且发送端每一个“0”或“1”都发送16次,接收端将以16倍的时钟周期,即以位宽时间为间隔,接收各数据位(在其中央位置接收数据)。一个字长数据(8位)接收完后,子程序返回。 二、程序框图和源程序 下面给出发送、接收一字长(8位)信号的子程序框图(见图1、图2)和PIC单片机源程序(发送、接收联络信号与数据信号相同)。注:所有延时程序略。 1.发送子程序 listp=16c65,f=inhx8m portbequ6 trisbequ16h statusequ3 rp0equ5 org0x100 fsbsfstatus,rp0;选存储体1 bcftrisb,6;置RB6为输出 bcfstatus,rp0;恢复存储体0 bsfportb,6;发准备信号“1” movlw0x08 movwf1f;置发送字长 callystb;延时同步 movlw0x10

基于51单片机串行通信的无线发射极和接收机设计

1 概述 1.1 课题的目的、背景和意义 最近几年来,由于无线接入技术需求日益增大,以及数据交换业务(如因特网、电子邮件、数据文件传输等)不断增加,无线通信和无线网络均呈现出指数增加的趋势。有力的推动力无线通信向高速通信方向发展。然而,工业、农业、车载电子系统、家用网络、医疗传感器和伺服执行机构等无线通信还未涉足或者刚刚涉足的领域,这些领域对数据吞吐量的要求很低,功率消耗也比现有标准提供的功率消耗低。此外,为了促使简单方便的,可以随意使用的无线装置大量涌现,需要在未来个人活动空间内布置大量的无线接入点,因而低廉的价格将起到关键作用。为降低元件的价格,以便这些装置批量生产,所以发展了一个关于这种网络的标准方案。Zigbee就是在这一标准下一种新兴的短距离、低功耗、低数据传输的无线网络技术,它是一种介于无线标记技术和蓝牙之间的技术方案。 对于这种短距离、低功耗、低数据传输无线技术,它不仅在工业、农业、军事、环境、医疗等传统领域有着巨大的应用价值,未来应用中还可以涉及人类日常生活和社会生产活动的所有领域。由于各方面的制约,这种技术的大规模商业应用还有待时日,但已经显示出了非凡的应用价值,相信随着相关技术的发展和推进,一定会得到更广泛应用。 1.2国内外无线技术相关现状及Zigbee现状 无线通信从固定方式发展为移动方式,移动通信发展至今大约经历了五个阶段:第一阶段为20年代初至50年代初,主要用于舰船及军有,采用短波频及电子管技术,至该阶段末期出现才出现150MHVHF单工汽车公用移动电话系统MTS。 第二阶段为50年代到60年代,此时频段扩展至UHF450MHZ器件技术已向半导体过渡,大多为移动环境的专用系统,并解决了移动电话与公用电话的接续问题。 第三阶段为70年代初至80年代初频段扩展至800MHZ,美国Bell研究所提出蜂窝系统概念并于70年代末进行了AMPS试验。

单片机也能给手机发短信

单片机也能给手机发短信 没错!利用强大的GSM网络,就可以实现单片机和手机之间互发短信。 我们知道,单片机以其强大的低成本优势和强大的采集、控制、存储功能在工业领域已经被广泛使用,而今天我们所要说的,并不是要介绍是如何的强大,也不标榜其在哪个领域的杰出贡献,我们今天所要说的,就是给单片机插上无线的翅膀,给它配上“手机”,让其利用成熟的GSM网络和远在海外的您收发短信。 试想一下,如果单片机自身具备了收发短信功能,那将是多么令人欣喜若狂的一件事,我们可以利用手机向单片机发送一条短信,单片机可以根据不同的短信内容,进行不同的动作,比如控制某些管脚的电平,如果外部加个继电器之类的,就可以用它来控制电源的开关等,单片机也可以将自身采集到的电压、电流、压力等模拟量值发送到指定的手机上。 下面我们具体来说一下如何使用单片机和手机进行短信收发。“巧妇难为无米之炊”,我们也需要几个“零件”: 1、单片机:无所谓什么型号,只要能提供串口就行,具体选型主要看其稳定性和自身要实 现的功能,最后就是性价比了。 2、GSM短信模块:这个市面上很多,价格也是参差不齐,我这里选择西安达泰电子的T09C 短信模块,个人觉得相对比较稳定,主要是它提供标准的AT指令,这样对于以后的产品升级或更换都有所保障;提供标准的RS232接口可以方便地与电脑的串口连接,通过提供的PC机测试软件方便进行电脑调试,帮助我们尽快上手。好多公司的同类产品将AT指令封装成自己的指令,这可能影响以后的产品改造和升级。 3、相关配件:5V电源、GSM天线、SIM卡、一些电子元器件。其中的5V电源和GSM天 线在购买时作为赠品已经提供给我们了,SIM卡就到当地移动服务厅办一张就行了,注意不能使用CDMA和3G卡,电子元器件主要部分是RS232转TTL的电平转换,我推荐常用的MAX232。 我想对于单片机和MAX232以及RS232接口之间的连接,搞过单片机的朋友都是轻车熟路了,为了节省互联网资源,我就不再重复。而SIM卡和GSM以及电源的连接,T09C 都提供相关的接口,即所谓的零插拨式的,绝不会插错。 下面我主要来说一下如何使用单片机程序实现短信收发,今天我们只谈谈英文短信的收发,中文短信收发相对比较麻烦一点儿,主要是中文的编码部分,但其流程和英文短信是一致的(如需收发中文短信,请参见相关PDU短消息格式说明等相关文档),这里只说一下短信收发的流程。 1、短信发送(通过单片机串口收发指令,/**/内为注释,表示回车,ASC码为 0x0D+0x0A) 发送:AT/*检测模块是否工作正常*/ 接收:OK/*串口返回OK表示模块工作正常*/ 发送:AT+CMGF=1/*配置模块工作于TEXT模式,用于发送英文

51单片机控制GSM模块发送短信

以下几个函数是用51单片机最近调试GSM模块发短信,打电话,挂电话的程序,可行!!(晶振一定要使用正确,不然通信会出问题,即使模块说可以做到波特率自适应,那也是在几个特定的波特率当中选择接近的某一个,比如我之前使用12M晶振时,每次开机只能发送一条短信,不能再发送第二条!必须重新开机才可以)。 1.串口初始化函数: void init_seri(void) //11.0592M晶振 { TMOD|=0x20; TH1=0xfd; TL1=0xfd; SM1=1; REN=1; //串口接收使能 TR1=1; //启动定时器 ES=0; //关闭串口中断 EA=1; //打开总中断 } 2.串口发送字符串函数: void Print_S(char *string) { while(*string){ SBUF = *string; while(!TI); TI=0; string++; } } 3.串口发送字符函数: void send_hex(unsigned char b) { SBUF=b; while(!TI); TI=0; } 4.打电话函数: unsigned char code call_number[]={"ATD151********;"}; void Send_Call(void) { Print_S(call_number); send_hex(0x0d); }

5.挂电话函数: void Send_ATH(void) { Print_S("ATH"); send_hex(0x0d); } 6.发短信函数: unsigned char code message_number[]={"AT+CMGS=\"151********\""}; unsigned char code message_content[]={"someone is coming ! --FROM BOBO"}; void long_delay(unsigned int cnt) { unsigned int k=50000; while(--cnt) { while(k--); } } void Send_Message(void) { Print_S(message_number); send_hex(0x0d); long_delay(2); Print_S(message_content); send_hex(0x0d); long_delay(2); send_hex(0x1a); long_delay(1); }

相关主题
文本预览
相关文档 最新文档