当前位置:首页 > 单片机 > 单片机
[导读] /************************* ********GPRS调试笔记********************************调试目的:通过SPCE061A单片机控制SIM900A GPRS模块发送短信调试过程: 1.利用延时来发送PDU格式的短信(不接受GPRS

/************************* ********GPRS调试笔记********************************

调试目的:通过SPCE061A单片机控制SIM900A GPRS模块发送短信

调试过程:

1.利用延时来发送PDU格式的短信(不接受GPRS的返回值)

a.发送AT+CMGF=0rn指令

b.延时2s,确定GPRS对a步骤中发送的指令已经接受。ps:延时的时长可做适当调整,但是一定要保证在这段时间里,GPRS已经接受AT

指令,并作出回应,否则会导致发送短信失败。笔者亲测过,延时时间太短的话,真的无法发送短信,当时没有注意到这一点,调试

了好久,才发现这个问题。

c.发送AT+CMGS=21rn指令,21为你要发送的字符长度,这里我就不介绍,SIM900A说明书上讲的很详细

d.延时2s,这里的原理和b中所说的几乎一样,不再追述

e.发送pdu格式的编码,这里需要设置一些参数,比如短信中心号码,接受号码等等,这里我也不细述了,毕竟使用说明书上写得很清

楚了,我发送的是“0891683108701305F011000D86688193909435F70008A7064F60597DFF01”,引号内以字符的形式发送就行,

这一串字符里,包含了一些参数的设置,还有发送短信的内容,读者在实际操作时,可将参数的设置和内容分开发送,笔者为了

简单处理,就统一处理了。

f.最后一步了,发送结束符--0x1a,直接发送0x1a,主要这里不要发送成字符了,是16进制0x1a;到此为至,短信已经成功发送了,

短信的内容是“你好!”;

2.通过判断GPRS的返回值来发送短信

a.发送AT+CMGF=0rn指令

b.

这里是重点,记得当时卡这里卡了好长时间,几乎到了要放弃的边缘!!!这里重点分析一下吧

while(strcmp(rec_string1,"AT+CMGF=0rnrnOK")!=0)

{

*P_Watchdog_Clear= 0x0001;

}

等待接受返回值,并且利用字符串比较函数比较接受到的字符串rec_string1和正确的返回值AT+CMGF=0rnrnOK对比;

这里用到的IRQ7串口中断来接受,利用全局变量str_string1[30]和全局n模拟一个栈来缓存接收到的返回值。需要强调说明的是

,发送完AT+CMGF=0rn这条指令后gprs的返回值应该是“AT+CMGF=0rnrnOK”,也就是返回了发送过去的AT指令加上回车换行

加上OK,但是资料上说的却是"OK",简直差点把笔者坑死,经过笔者不懈地努力调试,终于发现了这里的问题。

c.能到这一步,说明之前的返回值已经收到了,但是细心的读者可能就会发现,发送“AT+CMGS=21rn”这条指令的前面有这两行

简单的代码 delay();n = 0; 一行是延时,一行是清空栈底,清空栈底这里我就不过多的解释了,很简单。有的读者会问,

delay()函数是干什么的呢?不是不利用延时来发送短息吗?这里问题有点复杂,笔者自己也没弄得很清楚,但是当去掉delay()

或将delay()和n=0;两行代码互换位置后,程序就会死卡,并且,你调试时就会发现n并不是等于0的,rec_string1字符串里面存的

并不是GPRS本次返回值,而是有一部分是上次的,也就是说n=0这句并没有起到清空栈底的作用,但是,这程序已经运行到

send_string(cmd2);

while(strcmp(rec_string1,"AT+CMGS=21rnrn>")!=0)

{

*P_Watchdog_Clear= 0x0001;

}这里了啊?当时笔者也很疑惑,不能理解,感觉完全颠覆了我的认知(曾一度怀疑是61板的问题),但是后来仔细思考了一番

,发现很有可能是IRQ7中断的原因,导致n=0,这句执行失败,n=0这句c语言代码经编译器转换成汇编代码后,有好几句,也就是说

n=0这句C代码并不是cpu执行指令时的最小原子值,因此在执行这句代码时,很有可能被IRQ7中断给打断,导致这种结果。于是,

笔者在清空栈底时,用了delay()函数,延时确保不会发生中断,保护n=0这行代码。结果证明,我的猜想是正确的。

d.剩下的就没有什么要注意的了,和方法1里面几乎一样,笔者就不啰嗦了。

如有错误,希望各位大神能及时指出,互相学习!

这里附上源代码一份,希望对你有帮助!

http://download.csdn.net/detail/qq_24478297/8936803


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

GPRS通信模块是采用高性能工业级无线模块及嵌入式处理器,以实时操作系统作为软件支撑平台,内嵌自主知识产权的TCP/IP协议,为用户提供高速,稳定可靠,永远在线的透明数据传输通道。

关键字: GPRS 通信模块 处理器

在这篇文章中,小编将对GSM模块的相关内容和情况加以介绍以帮助大家增进对它的了解程度,和小编一起来阅读以下内容吧。

关键字: GSM GSM模块 GPRS

摘要:随着农业生产中对水资源利用率重视程度的不断提升,农业用水的灌溉效率与灌溉渗漏系数测定准确化与规范化越来越重要。为实现渠道水位测量的精确化与自动化,研制开发出一种基于GPRS的渠道水位监测系统。对投入式压力水位检测方...

关键字: GPRS 水位监测 上位机设计

GPS和GPRS,字面上仅仅多了个G,按照中国人捂住一半,读一半的猜字逻辑来看,这两者区别应该是不多的,GPS模块能做的,GPRS模块应该也能干,这显然是个美丽的误会。

关键字: GPS GPRS 通信

摘要:随着农业生产中对水资源利用率重视程度的不断提升,农业用水的灌溉效率与灌溉渗漏系数测定准确化与规范化越来越重要。为实现渠道水位测量的精确化与自动化,研制开发出一种基于GPRS的渠道水位监测系统。对投入式压力水位检测方...

关键字: GPRS 水位监测 上位机设计

摘要:针对目前城市道路井盖安全存在的问题,提出了一种基于ZigBee组网技术监测井盖破损或移位以及丢失的实时监测系统,其由井盖数据采集系统和上位机监测系统两部分构成。井盖数据采集系统由多个ZigBee节点构成,同一个Zi...

关键字: 井盖管理 Zigbee GPRS 实时监测

摘 要:设计一种运行在嵌入式Linux平台下的智能家居控制系统的实现方案,该系统采用ARM9微处理器S3C2440作 为主处理器,通过传感器模块对温度、湿度、烟雾信息等进行检测;通辻USB接口的摄像头采集视频信息,采用J...

关键字: S3C2440 Linux 传感器 GPRS 远程监控

摘要:论述了船舶企业高电耗的主要表现,为了达到船舶建造企业节电增效的目标,利用先进的物联网技术、传感器技术、智能仪表及嵌入式技术,研究并提出了船舶企业电能智能化应用的思路。同时通过对国内外电能研究的综合分析,设计了电能智...

关键字: 电能 智能化 船舶企业 物联网 GPRS

GSM-GPRS通过在原GSM网络基础上增加一系列的功能实体来完成分组数据功能,新增功能实体组成GSM-GPRS网络,作为独立的网络实体对CSM数据进行旁路,完成GPRS业务,原GSM网络则完成话音功能,尽量减少了对CS...

关键字: GSM GPRS SMG

GPRS主要的应用领域可以是:E—mail电子邮件、WWW浏览、WAP业务、电子商务、信息查询、远程监控,等等。人们通常将移动通信分为三代。第一代是模拟的无线网络,第二代是数字通信包括GSM、CDMA等,第三代是分组型的...

关键字: GPRS GSM
关闭
关闭