单片机控制短信收发Word文档格式.docx
- 文档编号:18872840
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:28
- 大小:110.96KB
单片机控制短信收发Word文档格式.docx
《单片机控制短信收发Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机控制短信收发Word文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
5.3SMS在证券交易中的成交回复与价格预警功………………15第6节结语……………………………………………………………16
参考文献………………………………………………………………17
附录一程序……………………………………………………………18
附录二…………………………………………………………………21
单片机控制实现短信收发
信息科学与工程学院计算机专升本班黄丹丹
【摘要】借助系统模型,阐明GSM模块收发短信的基本概念以及串口控制SMS的基本原理。
详细介绍用单片机AT89C51控制GSM模块工作的硬件和软件实现过程,介绍了单片机AT89C51和MSC1210内部结构和性能,并对AT89C51和MSC1210的性能、用途进行了比较,特别提出了MSC1210在高精度温度采集中所体现出别的芯片所不及的优势。
对怎样用单片机控制GSM模块收发短信进行探讨,也对程序设计的主体思想作了细致的分析。
大致介绍了SMS的体系结构以及在当今社会中SMS应用的新领域.本系统技术较先进,科技含量高运行速度快,精度高。
【关键词】单片机 短信收发 GSM SMS
第1节引言
中国联通数字移动电话(GSM)网是向社会公众提供通信服务的公用通信网,与中国电信网同为国家通信网的有机组成部分。
两网互联互通,自动接续,共享国家通信资源。
目前,中国联通数字移动电话业务由GSM网130、131业务和CDMA网133业务组成。
GSM是目前基于时分多址技术的移动通信体制中,比较成熟完善,且应用最广泛的一种系统。
目前已建成的覆盖全国的GSM数字蜂窝移动通信网,是我国公众移动通信网的主要方式。
基于GSM的短信信息服务,是一种在移动网络上传送简短信息的无线应用,是一种信息在移动网络上存储和转寄的过程。
由于公众GSM网络在全球范围内实现了联网和漫游,上述系统不需再组建专用通信网络,所以具有实时传输数据功能的短信应用将得到迅速普及。
本软件的设计基于GSM网络的温度数据采集与无线传输系统正是借助该网络平台,利用短信息业务实现数据的自动双向传递。
系统模型图如图1-1所示。
本系统由数据采集部分、数据接收和发送部分、终端处理部分三个模块组成。
数据采集模块将采集到的温度数据存入存储器中。
数据收发模块采用双单片机共用EERPOM的方式,单片机2控制数据从存储器转存入EEPROM中;
单片机1负责将数据从EEPROM中读出,并经GSM模块2借助GSM网络将数据发送出去。
单片机1不仅控制数据的发送,也控制数据的接收。
在这里,EEPROM是温度数据临时存储和上传的中转站。
终端处理模块负责将接收到的数据交给计算机处理,并将处理后的结果存放到数据库中,以供查询。
当终端处理模块需要向GSM模块2发送控制命令时,GSM模块2接收过程正好与上述过程相反,从而实现数据的自动双向传递。
图1-1系统模型
系统中,三个模块相互独立,彼此又相互依赖,共同完成数据的传输。
数据收发模块在系统中起着承上启下的作用,是系统的核心模块。
该模块以双单片机为核心,以RS232通信接口,在物理层上实现与GSM模块的连接。
由于篇幅的限制,本文主要介绍单片机控制这一模块工作的软件实现过程,旨在对怎样用单片机控制GSM模块收发短信息进行探讨。
第2节工作原理及其软件设计
2.1串口控制SMS的工作原理
单片机与GSM模块一般采用串行异步通信接口,通信速度可设定,通常为19200bps。
采用这种RSM232电缆方式进行连接时,数据传输的可靠性较好。
RS232接口方式连接,通过串行接口集成电路和电平转换电路与GSM模块连接,电路比较简单,所涉及的芯片包括单片机89C51和电平转换芯片MAX232,是非常常见的接口电路。
需要说明的是,该接口通过I2C总线扩展了一个EEPROM存储器芯片AT24C64,它的主要作用是存储数据,而且断电信息也不会丢失,这些特性正是存储数据所必须的。
GSM的短信息业务SMS利用信令信道传输,这是GSM通信网所特有的。
它不用拨号建立连接,把要发的信息加上目的数据发送到短信息服务中心,经短信服务中心完成存储后再发送给最终的信宿。
所以当目的GSM终端没开机时信息不会丢失。
每个短信的信息量限制为160字节。
现在市场上大多数手机均支持GSM07.05规定的AT指令集。
该指令集是ETSI(欧洲通信技术委员会)发布的,其中包含了对SMS的控制。
利用GSM手机的串行接口,单片机向手机收发一系列的AT命令,就能达到控制GSM模块收发SMS的目的。
必须注意的是,用单片机实现时,编程必须注意它发送指令与接收到的响应都是字符的ASCII码。
用单片机控制GSM模块收发短信息所涉
及以的AT指令如表2-1所列。
表2-1AT指令
AT指令
功
能
描
述
AT+OFF
关机并重新启动
AT+CSDH=0
在TEXT模式下在返回值中不显示详细的头信息
ATE0
关闭回显
AT+CMGF=1
选择短信格式为TEXT模式
AT+CMGS
发送短信息
AT+CMGR
读取短信息
AT+CMGD=0
删除全部短信息
2.2软件实现
2.2.1上位机模块和下位机模块半双工通信协议的实现
2.2.1.1应答和重发
上位机模块和下位模块的通信双方遵照半双工通信方式进行,即数据传送是双向的。
但是,任何时刻只能由其中的一方发送数据,另一方接收数据,因为EEPROM的读出和写入不能同时进行。
为了避免一方在发送信息帧时(这里的信息帧指的是下位机模块发送的数据帧和上位机模块发送的命令帧,下同),另一方也会发送数据,必须把信道变成半双工方式。
尽管这样效率可能不如全双工方式,但通过此举牺牲效率可以换取模块工作性能的稳定。
双方采取的顺序是:
发→收到应答后→再发。
按照整个系统的设计思路,上位机模块(即图1-1中的GSM模块1,下同)发送的帧包括命令帧、确认帧和非确认帧;
下位机模块(即图1-1中的GSM模块2,下同)发送的帧包括数据帧、确认帧和非确认帧。
其中确认帧和非确认帧是发送数据后等待对方发送的应答帧,以此作为继续发送下一帧和重新发送上一帧的依据。
命令帧和数据帧是信息帧,当一方先发送完信息帧,如果收方接收到对方的信息帧,而又没有信息帧需要发送,那么情况就比较简单,收方将根据信息帧的正确与否决定发送确认帧还是非确认帧,以使对方决定是继续发送还是重新发送;
如果此刻收方也有信息帧需要发送,那么收方将不立即发送应答帧,而是立即发送本方的信息帧给对方,并等待对方对此帧的应的应答帧,在收到对方的应答帧后,收方将依据应答帧的内容(即确认帧或者是非确认帧,下同)决定是继续发送下一信息帧,还是重新发送原来的信息帧。
如果由于链路本身不可靠等因素造成应答帧的丢失,收方将在一定时间内因为没有收到应答帧而延时重发原来的信息帧。
在收到对方的应答帧后,收方将继续发送下一信息帧,并等待对方的应答帧,如此反复,直到收方全部发送完信息帧。
在本方收到对方最后一个应答帧后,表明本方全部的信息帧发送完毕。
然后收方将发送对方仍然等待的应答帧,通知对方收到的信息帧正确与否。
2.2.1.2延时重发
在双方通信过程中,有两个时间t1和t2,分别表示重新发送信息帧的最大延时。
t1表示一方发送完信息帧到收到对方应答帧的时间,如果等待应答帧的时间超过了t1,则发方会重新发送原来的信息帧;
当收方接收到对方发送的信息帧,如果收方此时有需要发送的信息帧,则收方此时不发送应答帧,而是发送信息帧给对方。
也就是说,利用对方等待收方应答帧的时间t1内,收
方插入发送本文的信息帧,同样本方的发送也存在一个延时重发的问题。
在规定的时间内,如果没有收到对方应答帧,收方也同样需要重发原来的信息帧,这个规定的时间就是t2。
显然由于收方是利用间隙时间发送本方信息帧,所以t2<
t1。
图2-1以下位机模块先发数据帧为例,阐述双方通信的具体实现过程。
图2-1
需要说明的是,由于版面的限制,图2-1所示的通信过程没有涉及到发送非确认帧的情况,如果收方发送非确认帧,发方的发送过程跟发送数据帧是一样的,只不过这种情况下需要重发同一帧号的数据帧。
如果上位机模块先发命令帧,双方通信的实现过程跟图2-1类似,所不同的是数据帧此时变成命令帧,命令帧变成数据帧。
在延时的时间上,无论是下位机发送数据帧还是上位机发送命令帧,t2的大小都应该是一样的,都是利用时间间隔t2发送收方信息帧,延时的时间是相同的。
然而,对于t1而方,情况就有所不同。
因为下位机模块先发送数据帧时,利用t1的间隔时间上位机模块发送的命令帧可靠较少,因此当下位机模块先发送数据帧时所定义的t1应该小于当上位机模块先发送命令帧时,所定义的t1。
这是因为当上位机模块先发送命令帧时,利用t1的间隔时间下位机模块发送的数据帧可能比较多。
2.2.2帧格式
GSM模块通过异步通信接口实现对SMS的控制共有三种接入协议:
BlockMode;
基于AT指令的TextMode;
基于AT指令PDUMode。
本系统发送和接收的数据都是基于数字的温度数据和命令字,为了保证系统的适用性,SMS的收发采用TEXT模式。
TEXT模式是基于字符的,更具体地说是基于ASCII码的一种结构模式。
在该模式下,模块发送和接收的信息帧格式如下:
帧头
帧序号
数据
校验子
信息帧包括数据帧和命令帧。
帧头表示数据帧的标记,是由固定的字符“WQ”构成。
帧序号表示数据帧的序号,由两个字节组成。
帧序号表示下位机模块发送的递增数据帧序号和上位机模块发送的命令帧序号。
为了简化帧结构,命令帧的序号统一为00H。
数据字段的长度为154字节,最多发送77个字符(采用TEXT模式,不能发送汉字)。
检验子为数据字段所有字节累加和的初码(原码取反加1),由一个字节组成。
除了信息帧外,双向传递的还有应答帧,它包括确认帧和非确认帧。
确认帧是双方反馈给发方的应答帧,表示收方已经正确接收到了发方发送的信息帧。
确认帧格式仅包括两个字段,且两个字段的内容都是固定的,即帧头“WQ”和数据字段“ACK”,确认帧格式如下。
WQ
ACK
非确认帧是收方给发方的应答帧,表示收方收到的是无效的信息帧,其格式与确认帧格式类似,帧格式如下。
NACK
2.2.3EEPROM空间的分配
采用8KB的EEPROM,按照每77个字节为一个块进行划分,共106块,如图2-2所示。
第00、01块留作系统使用,第02块~第105块是数据块,用作存放数据。
图2-2EEPROM空间的分配
2.2.4收发端与采集端的握手协议
收发端与采集端共用一个存储器,即双CPU对同一个EEPROM进行操作。
实现方案是分别使两个微处理器的一个I/O脚相连,两个CPU采用查询方式对此I/O端进行查询。
如果某时候收发端查询到本地I/O端为高电平,则单片机1拥有此存储器的操作权,可以对EEPROM进行读写操作。
如果采集端查询到本地I/O端为高电平,则单片机2拥有此存储器的操作权,可以对它进行写操作。
一方操作完毕后将I2C总线置为高电平,表明本端已经释放I2C总线,EEPROM目前处于可用状态。
2.2.5程序的设计
2.2.5.1主函数的设计思路
开机上电后,程序在主函数中运行,单片机和GSM模块分别进行初始化。
单片机的初始化包括设置串口工作方式、波特率,并初始化变量参数和标志位。
GSM模块初始化包括重新启动、关闭回显、设置在TEXT模式下的返回值中不显示详细的头信息、选择短信格式为TEXT模式、开发串口中断准备接收数据。
2.2.5.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系列所有器件的调试、仿真和编程。
3.1.1.89C51具有下列主要性能:
◇4KB可改编程序Flash存储器
(可经受1,000次的写入/擦除周期)
◇全静态工作:
0Hz~24MHz
◇三级程序存储器保密
◇128X8字节内部RAM
◇32条可编程I/O线
◇2个16位定时器/计数器
◇6个中断源
◇可编程串行通道
◇片内时钟振荡器
另外,89C51是用静态逻辑来设计的,其工作频率可下降到0Hz,并提供两种可用软件来选择的省电方式——空闲方式(IdleMode)和掉电方式(PowerDownMode)。
在空闲方式中,CPU停止工作,而RAM、定时器/计数器、串行口和中断系统都继续工作。
在掉电方式中,片内振荡器停止工作,由于时钟被“冻结”,使一切功能都暂停,只保存片内RAM中的内容,直到下一次硬件复位为止。
3.1.2.89C51的引脚及功能
3.1.2.1主要电源引脚
Vcc电源端
GND接地端
3.1.2.2外接晶体引脚XTAL1和XTAL2
XTAL1接外部晶体的一个引脚。
在单片机内部,它是构成片内振荡器的反相放大器的输入端。
当采用外部振荡器时,该引脚接收振荡器的信号,既把此信号直接接到内部时钟发生器的输入端。
XTAL2接外部晶体的另一个引脚。
在单片机内部,它是上述振荡器的反相放大器的输出端。
采用外部振荡器时,此引脚应悬浮不连接。
3.1.2.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编程)。
3.1.2.4输入/输出引脚P0.0~P0.7、P10.~P1.7、P2.0~P2.7和P3.0~P3.7
P0端口(P0.0~P0.7)P0是一个8位漏极开路型双向I/O端口。
作为输出口用时,每位能以吸收电流的方式驱动8个TTL输入,对端口写1时,又可作高阻抗输入端用。
在访问外部程序和数据存储器时,它是分时多路转换的地址(低8位)/数据总线,在访问期间激活了内部的上拉电阻。
在Flash编程时,P0端口接收指令字节;
而在验证程序时,则输出指令字节。
验证时,要求外接上拉电阻。
P1端口(P1.0~P1.7)P1是一个带有内部上拉电阻的8位双向I/O端口。
P1的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。
对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。
作输入口时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。
在对Flash编程和程序验证时,P1接收低8位地址。
P2端口(P2.0~P2.7)P2是一个带有内部上拉电阻的8位双向I/O端口。
P2的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。
P2作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。
在访问外部程序存储器和16位地址的外部数据存储器(如执行MOVX@DPIR指令)时,P2送出高8位地址。
在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中P2寄存器的内容),在整个访问期间不会改变。
在对Flash编程和程序验证期间,P2也接收高位地址和一些控制信号。
P3端口(P3.0~P3.7)P3是一个带有内部上拉电阻的8位双向I/O端口。
P3作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。
在89C51中,P3端口还用于一些专门功能,这些兼用功能见表3-1
表3—1P3端口兼用功能表
端口引脚
兼用功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
/INT0(外部中断0)
P3.3
/INT1(外部中断1)
P3.4
T0(定时器/计数器0的外部输入)
P3.5
T1(定时器/计数器1的外部输入)
P3.6
/WR(外部数据存储器写选通)
P3.7
/RD(外部数据存储器读选通)
在对Flash编程和程序验证时,P3还接收一些控制信号。
3.1.3.Flash存储器的编程和程序校验:
AT89C51单片机内部有一个4K字节的FlashPEROM。
这个Flash存储阵列通常是处于已擦除状态(既存储单元的内容为FFH),随时可对它进行编程。
编程接口可接收高电压(12V)或低电压(Vcc)的允许编程信号。
低电压编程方式可很方便地对AT89C51内的用户系统进行编程;
而高电压编程方式则可与通用的EPROM编程器兼容。
AT89C51的程序存储器阵列是采用字节写入方式编程的,既每次写入一个字节。
要对片内的PEROM程序存储器写入任何一个非空字节,都必须用片擦除方式将整个存储器的内容清除。
3.1.3.1对Flash存储器编程
编程前,必须建立好地址、数据和相应的控制信号。
编程单元的地址加在P1端口和P2端口的P2.0~P2.3(11位地址为0000H~0FFFH),数据从P0端口输入。
引脚P2.6、P2.7和P3.6、P3.7的电平选择见表2。
/PSEN应保持低电平,而RST应保持高电平。
/EA/VPP是编程电源的输入端,按要求加入编程电压。
ALE//PROG端输入编程脉冲(应为负脉冲信号)。
编程时,采用4~20MHz的振荡器。
对AT89C51编程的步骤如下:
在地址线上输入要编程单元的地址。
在数据线上输入要写入的数据字节。
激活相应的控制信号。
在采用高电压编程方式时,将/EA/VPP端的电压加到12V。
每对Flash存储阵列写入一个字节或每写入一个程序加密位,加一个ALE//PROG编程脉冲。
改变编程单元的地址和要写入的数据,重复上述步骤,直到全部文件编程完毕。
每个字节写入周期是自动定时的,通常不大于1.5ms。
数据查询方式
AT89C51单片机用数据查询方式来检测一个写周期是否结束。
在一个写周期期间,如果想读出最后写入的哪个字,则读出数据的最高位(P0.7)是原来写入字节最高位的反码。
写周期一旦完成后,有效的数据就会出现在所有输出端上,这时可开
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 控制 短信 收发