单片机操纵GSM模块实现短信收发.docx
- 文档编号:14009434
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:21
- 大小:68.51KB
单片机操纵GSM模块实现短信收发.docx
《单片机操纵GSM模块实现短信收发.docx》由会员分享,可在线阅读,更多相关《单片机操纵GSM模块实现短信收发.docx(21页珍藏版)》请在冰点文库上搜索。
单片机操纵GSM模块实现短信收发
单片机操纵GSM模块实现短信收发
【摘要】借助系统模型,说明GSM模块收发短信的大体概念和串口操纵SMS的大体原理。
详细介绍用单片机AT89C51操纵GSM模块工作的硬件和软件实现进程,介绍了单片机AT89C51和MSC1210内部结构和性能,并对AT89C51和MSC1210的性能、用途进行了比较,专门提出了MSC1210在高精度温度搜集中所表现出别的芯片所不及的优势。
大对如何用单片机操纵GSM模块收发短信进行探讨,也对程序设计的主体思想作了细致的分析。
致介绍了SMS的体系结构和在现今社会中SMS应用的新领域.本系统技术较先进,科技含量高运行速度快,精度高。
第一节引言
随着科技的飞速进展和人民生活水平的不断提高,电话的普及率愈来愈高,更新也愈来愈快,价钱也愈来愈廉价。
因为电话工作的无线网络覆盖范围广,在信息传递方面性能稳固、靠得住,因此把电话作为信息传递的载体,与单片机结合起来组成应用系统有着壮大的生命力和广漠的应用空间,专门是在远程数据传输、远程监控等领域更是受到了普遍的关注。
本软件的设计基于GSM网络的温度数据搜集与无线传输系统正是借助该网络平台,利用短信息业务实现数据的自动双向传递。
系统模型图如图1-1所示。
终端处置模块
本系统由数据搜集部份、数据接收和发送部份、终端处置部份等三个模块组成。
数据搜集模块将搜集到的温度数据存入存储器中。
数据收发模块采纳双单片机共用E2RPOM的方式,单片机2操纵数据从存储器转存入E2PROM中;单片机1负责将数据从E2PRROM中读出,并经GSM模块2借助GSM网络将数据发送出去,单片机1不仅操纵数据的发送,也操纵数据的接收。
在那个地址E2PROM是温度数据临时存储和上传的中转站。
终端处置模块负责将接收到的数据交给运算机处置,并将处置后的结果寄存到数据库中,以供查询。
当终端处置模块需要向GSM模块2发送操纵命令时,GSM模块2接收进程正好与上述进程相反,从而实现数据的自动双向传递。
系统中三个模块彼此独立,彼此又彼此依托,一起完成数据的传输。
数据收发模块在系统中起着承先启后的作用,是系统的核心模块。
该模块以双单片机为核心,以RS232通信接口,在物理层上实现与GSM模块的连接。
由于篇幅的限制,本文要紧介绍单片机操纵这一模块工作的软件实现进程。
旨在对如何用单片机操纵GSM模块收发短信息进行探讨。
第2节工作原理及其软件设计
2.1串口操纵GSM的原理
单片机与GSM模块一样采纳串行异步通信接口,通信速度可设定,采纳这种RSM232电缆方式进行连接时,数据传输的靠得住性较好。
RS232接口方式连接,通过串行接口与GSM模块连接,电路比较简单,所涉及的芯片包括单片机AT89C51和GSM模块TC35I。
需要说明的是,该接口通过I2C总线扩展了一个EEPROM存储器芯片AT24C64,它的要紧作用是存储数据,而且断电信息也可不能丢失,这些特性正是存储数据所必需的。
此刻市场上大多数电话均支持规定的AT指令集。
该指令集是ETSI(欧洲通信技术委员会)发布的,其中包括了对SMS的操纵。
利用GSM电话的串行接口,单片机向电话收发一系列的AT命令,就能够达到操纵GSM模块收发SMS的目的。
必需注意的是,用单片机实现时,编程必需注意它发送指令与接收到的响应都是字符的ASCII码。
AT命令集是从TE(TerminalEquipment,终端设备)或DTE(DataTerminal.Equipment,数据终端设备)向TA(TerminalAdapter,终端适配器)或DCE(DataCircuitTerminatingEquipment)发送的。
通过TA、TE发送AT命令来操纵MS(MobileStation,移动基站)的功能与GSM网络业务进行交互。
用单片机操纵GSM模块收发短信息所涉及以的AT指令如表2-1所列。
AT指令
功 能 描 述
AT
联机
AT+OFF
关机并重新启动
AT+CSDH=0
在TEXT模式下在返回值中不显示详细的头信息
ATE0
关闭回显
AT+CMGF=1
选择短信格式为TEXT模式
AT+CMGS
发送短信息
AT+CMGR
读取短信息
AT+IPR
改变波特率
AT+CMGD=0
删除全部短信息
AT+CSCA
设置短消息中心
AT+CREG?
网络注册
表2-1
2.2软件实现
2.2.1上位机模块和下位机模块半双工通信协议的实现
.1应答和重发
上位机模块和下位模块的通信两边遵循半双工通信方式进行,即数据传送是双向的。
可是,任何时刻只能由其中的一方发送数据,另一方接收数据,因为EEPROM的读出和写入不能同时进行。
为了幸免一方在发送信息帧时(那个地址的信息帧指的是下位机模块发送的数据帧和上位机模块发送的命令帧,下同),另一方也会发送数据,必需把信道变成半双工方式。
尽管如此效率可能不如全双工方式,但通过此举捐躯效率能够换取模块工作性能的稳固。
两边采取的顺序是:
发→收到应答后→再发。
依照整个系统的设计思路,上位机模块(即图1-1中的GSM模块1,下同)发送的帧包括命令帧、确认帧和非确认帧;下位机模块(即图1-1中的GSM模块2,下同)发送的帧包括数据帧、确认帧和非确认帧。
其中确认帧和非确认帧是发送数据后等待对方发送的应答帧,以此作为继续发送下一帧和从头发送上一帧的依据。
命令帧和数据帧是信息帧,当一方先发送完信息帧,若是收方接收到对方的信息帧,而又没有信息帧需要发送,那么情形就比较简单,收方将依照信息帧的正确与否决定发送确认帧仍是非确认帧,以使对方决定是继续发送仍是从头发送;若是此刻收方也有信息帧需要发送,那么收方将不当即发送应答帧,而是当即发送本方的信息帧给对方,并等待对方对此帧的应的应答帧,在收到对方的应答帧后,收方将依据应答帧的内容(即确认帧或是非确认帧,下同)决定是继续发送下一信息帧,仍是从头发送原先的信息帧。
若是由于链路本身不靠得住等因素造成应答帧的丢失,收方将在一按时刻内因为没有收到应答帧而延时重发原先的信息帧。
在收到对方的应答帧后,收方将继续发送下一信息帧,并等待对方的应答帧,如此反复,直到收方全数发送完信息帧。
在本方收到对方最后一个应答帧后,说明本方全数的信息帧发送完毕。
然后收方将发送对方仍然等待的应答帧,通知对方收到的信息帧正确与否。
.2延时重发
在两边通信进程中,有两个时刻t1和t2,别离表示从头发送信息帧的最大延时。
t1表示一方发送完信息帧到收到对方应答帧的时刻,若是等待应答帧的时刻超过了t1,那么发方会从头发送原先的信息帧;当收方接收到对方发送的信息帧,若是收方现在有需要发送的信息帧,那么收方现在不发送应答帧,而是发送信息帧给对方。
也确实是说,利用对方等待收方应答帧的时刻t1内,收方插入发送本文的信息帧,一样本方的发送也存在一个延时重发的问题。
在规定的时刻内,若是没有收到对方应答帧,收方也一样需要重发原先的信息帧,那个规定的时刻确实是t2。
显然由于收方是利用间隙时刻发送本方信息帧,因此t2 图2-1以下位机模块先发数据帧为例,论述两边通信的具体实现进程。 图2-1 需要说明的是,由于版面的限制,图2-1所示的通信进程没有涉及到发送非确认帧的情形,若是收方发送非确认帧,发方的发送进程跟发送数据帧是一样的,只只是这种情形下需要重发同一帧号的数据帧。 若是上位机模块先发命令帧,两边通信的实现进程跟图2-1类似,所不同的是数据帧现在变成命令帧,命令帧变成数据帧。 在延时的时刻上,不管是下位机发送数据帧仍是上位机发送死令帧,t2的大小都应该是一样的,都是利历时刻距离t2发送收方信息帧,延时的时刻是相同的。 但是,关于t1而方,情形就有所不同。 因为下位机模块先发送数据帧时,利用t1的距离时刻上位机模块发送的命令帧靠得住较少,因此当下位机模块先发送数据帧时所概念的t1应该小于当上位机模块先发送死令帧时,所概念的t1。 这是因为当上位机模块先发送死令帧时,利用t1的距离时刻下位机模块发送的数据帧可能比较多。 帧格式 短消息(ShortMessage,SM是GSM网络系统的要紧增值业务之一,短消息接收和发送的业务代码别离为T21和T22。 申请了短消息效劳的用户,在电话上设置短消息中心号码后即可发送短消息,接收短消息无需任何设置。 。 短消息是通过操纵信道传输的,不占业务信道,在通话的同时也能够接收短消息。 它不用拨号成立连接,把要发的信息加上目的地址发送到短信息效劳中心,经短信效劳中心完成存储后再发送给最终的信宿。 因此当目的GSM终端没开机时信息可不能丢失。 一条短消息的最大长度可为160个英文字符(7位编码)或70个汉字(16位编码)。 GSM模块通过异步通信接话柄现对SMS的操纵共有三种接入协议: BlockMode;基于AT指令的TextMode;基于AT指令PDUMode。 本系统发送和接收的数据都是基于数字的温度数据和命令字,为了保证系统的适用性,SMS的收发采纳TEXT模式。 TEXT模式是基于字符的,更具体地说是基于ASCII码的一种结构模式。 在该模式下,模块发送和接收的信息帧格式如表2所示,信息帧包括数据帧和命令帧。 帧头 帧序号 数据 校验子 信息帧包括数据帧和命令帧。 帧头表示数据帧的标记,是由固定的字符“WQ”组成。 帧序号表示数据帧的序号,由两个字节组成。 帧序号表示下位机模块发送的递增数据帧序号和上位机模块发送的命令帧序号。 为了简化帧结构,命令帧的序号统一为00H。 数据字段的长度为154字节,最多发送77个字符(采纳TEXT模式,不能发送汉字)。 查验子为数据字段所有字节累加和的初码(原码取反加1),由一个字节组成。 除信息帧外,双向传递的还有应答帧,它包括确认帧和非确认帧。 确认帧是两边反馈给发方的应答帧,表示收方已经正确接收到了发方发送的信息帧。 确认帧格式仅包括两个字段,且两个字段的内容都是固定的,即帧头“WQ”和数据字段“ACK”,确认帧格式如下。 WQ ACK 非确认帧是收方给发方的应答帧,表示收方收到的是无效的信息帧,其格式与确认帧格式类似,帧格式如下。 WQ NACK EEPROM空间的分派 采纳8KB的EEPROM,依照每77个字节为一个块进行划分,共106块,如图2-2所示。 第00、01块留作系统利用,第02块~第105块是数据块,用作寄存数据。 …… 00: 系统利用0000H~0076H 0077H~00EDH 。 。 。 。 。 。 … 01: 系统利用 104: 数据块 105: 数据块 图2-2EEPROM的空间分派 收发端与搜集端的握手协议 收发端与搜集端共用一个存储器,即双CPU对同一个EEPROM进行操作。 实现方案是别离使两个微处置器的一个I/O脚相连,两个CPU采纳查询方式对此I/O端进行查询。 若是某时候收发端查询到本地I/O端为高电平,那么单片机1拥有此存储器的操作权,能够对EEPROM进行读写操作。 若是搜集端查询到本地I/O端为高电平,那么单片机2拥有此存储器的操作权,能够对它进行写操作。 一方操作完毕后将I2C总线置为高电平,说明本端已经释放I2C总线,EEPROM目前处于可用状态。 程序的设计 .1主函数的设计思路 开机上电后,程序在主函数中运行,单片机和GSM模块别离进行初始化。 单片机的初始化包括设置串口工作方式、波特率,并初始化变量参数和标志位。 GSM模块初始化包括从头启动、关闭回显、设置在TEXT模式下的返回值中不显示详细的头信息、选择短信格式为TEXT模式、开发串口中断预备接收数据。 .2GSM返回参数的处置—SHELL函数 SHELL函数是进入时钟中断程序时被调历时,该函数是对GSM模块返回参数进行处置的函数。 依照系统设计的要求,需要对GSM模块进行以下操作: 呼唤对方模块号码、发送数据、阅读短信、删除短信。 基于以上操作指令,若是操作成功GSM模块会别离返回不同的参数: >、+CMGS、+CMGR、OK。 依照接收到的不同参数,下位机模块将转向不同的操作步骤,判定并改变标志位的值。 比如,若是某时刻接收到>,这说明呼唤对方模块号码取得成功,接下来需要发送数据。 这时SHELL函数将检查发送不同数据所代表的标志位f_sending、f_ack、f_nack,从而决定需要发送何种类型的数据。 2.3短信数据的处置—ExecData函数 进入时钟中断挪用SHELL函数时,若是接收到了返回的参数+CMTI,说明上位机模块向下位机模块发送了短信数据,可能是命令帧,也可能是确认帧或非确认帧。 在这种情形下,SHELL函数需要对短信内容进行分析,并依照短信的内容进行不同的处置,负责完成以上功能的确实是ExecData函数,它是被SHELL函数挪用的,用来分析并处置短信数据。 第3节系统硬件介绍 3.1系统核心部份---单片机AT89C51 单片机AT89C51有内部RAM,能够作为各类数据区利用,内部闪电存储器寄存数字时钟的操纵程序。 它的要紧功能是操纵74LS138和74LS47,实现对LED显示器的位控和段控,完成时刻的转换计算,并把计算的时刻转换到相应的显示段码,操纵LED显示器以动态扫描方式进行时、分、秒的显示。 AT89系列单片机是ATMEL公司生产的。 这是当前最新的一种电擦写8位单片机,与MCS-51系列完全兼容,有超强的加密功能,可完全替代87C51/52和8751/52。 与87C51相较,AT89系列的优越性在于,其片内闪电存储器的编程与擦除完全用电实现;数据不易挥发,可保留10年;编程/擦除速度快,全4K字节编程只需时3s,擦除时刻约用10ms;AT89系列了实此刻线编程;也可借助线进行远距离编程。 AT89C51是一种低功耗、高性能内含4K字节闪电存储器(FlashMemory)的8位CMOS微操纵器。 这种器件系以ATMEL高密度不挥发存储技术制造,与工业标准MCS-51指令系统和引脚完全兼容。 片内闪电存储器的程序代码或数据可在线写入,亦可通过常规的编程器编程。 例如,MP-100如此一种经济型的编程器,它支持通用EPROM等各类存储器、PAL、GAL和INTEL、ATMEL和PHILIPS等各公司的全系列51单片机的编程。 ME5103和ME5105仿真器支持AT89系列所有器件的调试、仿真和编程。 .89C51具有以下要紧性能: ◇4KB可改编程序Flash存储器 (可经受1,000次的写入/擦除周期) ◇全静态工作: 0Hz~24MHz ◇三级程序存储器保密 ◇128X8字节内部RAM ◇32条可编程I/O线 ◇2个16位按时器/计数器 ◇6个中断源 ◇可编程串行通道 ◇片内时钟振荡器 另外,89C51是用静态逻辑来设计的,其工作频率可下降到0Hz,并提供两种可用软件来选择的省电方式——空闲方式(IdleMode)和掉电方式(PowerDownMode)。 在空闲方式中,CPU停止工作,而RAM、按时器/计数器、串行口和中断系统都继续工作。 在掉电方式中,片内振荡器停止工作,由于时钟被“冻结”,使一切功能都暂停,只保留片内RAM中的内容,直到下一次硬件复位为止。 .89C51的引脚及功能 .1要紧电源引脚 Vcc电源端 GND接地端 .2外接晶体引脚XTAL1和XTAL2 XTAL1接外部晶体的一个引脚。 在单片机内部,它是组成片内振荡器的反相放大器的输入端。 当采纳外部振荡器时,该引脚接收振荡器的信号,既把此信号直接接到内部时钟发生器的输入端。 XTAL2接外部晶体的另一个引脚。 在单片机内部,它是上述振荡器的反相放大器的输出端。 采纳外部振荡器时,此引脚应悬浮不连接。 .3操纵或与其它电源复用引脚RST、ALE//PROG、/PSEN和/EA/Vpp RES复位输入端。 当振荡器运行时,在该引脚上显现两个机械周期的高电平将使单片机复位。 ALE//PROG当访问外部存储器时,ALE(地址锁存许诺)的输出用于锁存地址的低位字节。 即便不访问外部存储器,ALE端仍以不变的频率(此频率为振荡器频率的1/6)周期性地显现正脉冲信号。 因此,它可用作对外输出的时钟,或用于按时目的。 但是要注意的是: 每当访问外部数据存储器时,将跳过一个ALE脉冲。 在对Flash存储器编程期间,该引脚还用于输入编程脉冲(/PROG)。 若是需要的话,通过对专用寄放器(SFR)区中8EH单元的D0位置数,可禁止ALE操作。 该位置数后,只有在执行一条MOVX或MOVC指令期间,ALE才会被激活。 另外,该引脚会被微弱拉高,单片机执行外部程序时,该设定禁止ALE位无效。 /PSEN程序存储许诺(/PSEN)输出是外部程序存储器的读选通信号。 当80C51由外部程序存储器取指令(或常数)时,每一个机械周期两次/PSEN有效(既输出2个脉冲)。 但在此期间内,每当访问外部数据存储器时,这两次有效的/PSEN信号将不显现。 /EA/Vpp外部访问许诺端。 要使CPU只访问外部程序存储器(地址为0000H~FFFFH),那么 /EA端必需维持低电平(接到GND端)。 但是要注意的是,若是保密位LB1被编程,复位时在内部会锁存/EA端的状态。 当/EA端维持高电平(接Vcc端)时,CPU那么执行内部程序存储器中的程序,并可延续至外部程序存储器。 在Flash存储器编程期间,该引脚也用于施加12V的编程许诺电源Vpp(若是选用12V编程)。 .4输入/输出引脚~、P10.~、~P2.7和~ P0端口(~)P0是一个8位漏极开路型双向I/O端口。 作为输出口历时,每位能以吸收电流的方式驱动8个TTL输入,对端口写1时,又可作高阻抗输入端用。 在访问外部程序和数据存储器时,它是分时多路转换的地址(低8位)/数据总线,在访问期间激活了内部的上拉电阻。 在Flash编程时,P0端口接收指令字节;而在验证程序时,那么输出指令字节。 验证时,要求外接上拉电阻。 P1端口(P1.0~)P1是一个带有内部上拉电阻的8位双向I/O端口。 P1的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。 对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。 作输入口时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。 在对Flash编程和程序验证时,P1接收低8位地址。 P2端口(~)P2是一个带有内部上拉电阻的8位双向I/O端口。 P2的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。 对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。 P2作输入口利历时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。 在访问外部程序存储器和16位地址的外部数据存储器(如执行MOVX@DPIR指令)时,P2送出高8位地址。 在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口引脚上的内容(确实是专用寄放器(SFR)区中P2寄放器的内容),在整个访问期间可不能改变。 在对Flash编程和程序验证期间,P2也接收高位地址和一些操纵信号。 P3端口(~)P3是一个带有内部上拉电阻的8位双向I/O端口。 P2的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。 对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。 P3作输入口利历时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。 在89C51中,P3端口还用于一些专门功能,这些兼用功能见表3-1 表3—1P3端口兼用功能表 端口引脚 兼用功能 RXD(串行输入口) TXD(串行输出口) /INT0(外部中断0) /INT1(外部中断1) T0(定时器/计数器0的外部输入) T1(定时器/计数器1的外部输入) /WR(外部数据存储器写选通) /RD(外部数据存储器读选通) 在对Flash编程和程序验证时,P3还接收一些操纵信号。 .Flash存储器的编程和程序校验: AT89C51单片机内部有一个4K字节的FlashPEROM。 那个Flash存储阵列一般是处于已擦除状态(既存储单元的内容为FFH),随时可对它进行编程。 编程接口可接收高电压(12V)或低电压(Vcc)的许诺编程信号。 低电压编程方式可很方便地对AT89C51内的用户系统进行编程;而高电压编程方式那么可与通用的EPROM编程器兼容。 AT89C51的程序存储器阵列是采纳字节写入方式编程的,既每次写入一个字节。 要对片内的PEROM程序存储器写入任何一个非空字节,都必需用片擦除方式将整个存储器的内容清除。 3.1.3.1对Flash存储器编程 编程前,必需成立好地址、数据和相应的操纵信号。 编程单元的地址加在P1端口和P2端口的~(11位地址为0000H~0FFFH),数据从P0端口输入。 引脚、和、的电平选择见表2。 /PSEN应维持低电平,而RST应维持高电平。 /EA/VPP是编程电源的输入端,按要求加入编程电压。 ALE//PROG端输入编程脉冲(应为负脉冲信号)。 编程时,采纳4~20MHz的振荡器。 对AT89C51编程的步骤如下: 在地址线上输入要编程单元的地址。 在数据线上输入要写入的数据字节。 激活相应的操纵信号。 在采纳高电压编程方式时,将/EA/VPP端的电压加到12V。 每对Flash存储阵列写入一个字节或每写入一个程序加密位,加一个ALE//PROG编程脉冲。 改变编程单元的地址和要写入的数据,重复上述步骤,直到全数文件编程完毕。 每一个字节写入周期是自动按时的,通常不大于。 数据查询方式 AT89C51单片机用数据查询方式来检测一个写周期是不是终止。 在一个写周期期间,若是想读出最后写入的哪个字,那么读出数据的最高位()是原先写入字节最高位的反码。 写周期一旦完成后,有效的数据就会出此刻所有输出端上,这时可开始下一个写周期。 一个写周期开始后,可在任何时刻开始进行数据查询。 预备就绪/忙信号 字节编程的进程也可通过RDY//BSY输出信号来监视。 在编程期间,当ALE变成高电平后,(RDY//BSY)端的电平被拉低,表示忙(正在编程)状态。 编程完毕后,的电平变高表示就绪状态。 程序的校验 若是加密位LB1和LB2没有被编程,那么就能够够对AT89C51内部已编好的程序进行校验。 程序存储器的地址仍由P1端口和P2端口的~输入,数据由P0端口输入。 /PSEN维持低电平,而ALE、/EA和RST维持高电平。 校验时,在P0端口上要求外接约10KΩ左右的上拉电阻。 程序加密位不能直接校验。 加密位的校验可通过观看它们的功能是不是被许诺来进行。 3.2GSM模块TC35I TC35i新版西门子工业GSM模块是一个支持中文短信息的工业级GSM模块,工作在EGSM900和GSM1800双频段,电源范围为直流~4.8V,电流消耗——休眠状态为,空闲状态为25mA,发射状态为300mA(平均),峰值;可传输语音和数据信号,功耗在EGSM900(4类)和GSM1800(1类)别离为2W和1W,通过接口连接器和天线连接器别离连接SIM卡读卡器和天线。 SIM电压为,TC35i的数据接口(CMOS电平)通过AT命令可双向传输指令和数据,可选波特率为300b/s~115kb/s,自动波特率为~115kb/s。 它支持Text和PDU格式的SMS(ShortMessage
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 操纵 GSM 模块 实现 短信 收发