0272.基于MSP430的防盗报警系统GSM学习笔记.doc.docVIP

0272.基于MSP430的防盗报警系统GSM学习笔记.doc.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
0272.基于MSP430的防盗报警系统GSM学习笔记.doc

用MSP430F149单片机开发GSM模块变压器报警系统学习笔记 2015年1月29日18:15:20 目录: GSM模块总是发送信息到串口 按键中断无法退出的问题 Flash写入问题 字符数组和字符串的拼接问题。 字符数组与字符串参考资料 1、GSM模块总是发送信息到串口 发送的数据如下图: 问题的原因是GSM模块频繁的重启导致的,一部分原因可能是电脑的USB接口电压不稳定,导致的GSM模块工作欠压状态,故而频繁重启。这个需要在后期注意。 2、按键中断无法退出的问题 按键是普通中断,但是却出现了进入中断却无法退出的问题。这个问题,出在了延时函数上,我选择的延时函数是利用定时器的,这个函数可能在中断函数中影响了中断标志,故而无法退出中断。 解决方法是使用普通的延时函数,不使用定时器就好了。 3、Flash写入问题 在对Flash写入时,使用的是别人写好的库函数,这个库函数有个问题,问题就是每次写一位数据,就会相应的将前面的数据都清除掉。 例如:在F0x1000位置写字符“a”,在F0X1001位置写字符“b”,在F0X1002位置写“c”。得到的结果就是“ c”。前面的数据都变成了0X00,被清空了。我们看一下程序: void Flash_WriteB(uchar *address,uchar data8) { //FCTL1 = 0xA500+0x0002; //允许擦除 FCTL3 = 0xA500; //解锁 //*address = 0; //启动擦除 FCTL1 = 0xA500+0x0040; //允许写 *address = data8; //写入数据 FCTL1 = 0xA500; FCTL3 = 0xA500+0x0010; //锁定 } 原因是开启了擦除指令,擦除指令把原来的数据都给擦除了。按理说,这个擦除指令应该只是擦除一个位置的数据,但是,却对其他位置的数据都给擦除了。所以,修改原函数,将原函数中的内容禁止擦除,这样,就解决了其他问题数据再写入新数据时被擦掉了。 4、字符数组和字符串的拼接问题。 首先,怎样拼接一个字符串? 我使用的方法是 (先包含一下string.h头文件) 定义一个足够长度的字符串空间,uchar test1[11]; Uchar *set=”SET”; Uchar *read=”READ”; strcpy(test1,set); strcat(test1,read); 第一条语句是把set字符串的内容复制到test1当中去,然后,利用第二条指令,就是把第二个字符拼接到第一个字符串中去,拼接时,自动去掉第一个字符串末尾的‘\0’,并在重新拼接的字符串后面添加一个‘\0’。 当我把set部分换成是一个字符串数组时,即uchar set[11];时,使用同样的方法拼接字符串,得到的结果还是相似,但是却无法使用字符串发送函数(即以‘\0’为末尾识别的函数)。 因为字符数组的默认是不包含‘\0’的。我们定义一个字符数组uchar set[3]={‘s’,‘e’,‘t’};,这种定义并赋值方式,和uchar set[3];这种定义方式,实际的有效数据就是3,而字符数组的长度也是3.这个字符数组的末尾,没有‘\0’。故而导致发送函数出错。 我们应该如何定义字符数组呢?我们应该让字符数组的最后一位多一个‘\0’,这样发送函数才会不至于出错。我们可以这样定义: uchar set[4]=; 我们多给字符数组了一位空间,这个空间,就是字符数组用来存放\0的。而我们在定义的时候,给字符数组赋值成了一个空的字符串,这样,每一个字符串的末尾都必定是\0,所以,我们的字符数组set[3]的数据就一定是\0,只要我们在后期处理函数中,不把这位数据给修改掉,这样,我们得到的最新字符数组的末尾就有了\0,可以用于字符串的拼接和发送了。 当然,拼接的时候,还需要一次强制转换。如下: strcpy((char *)at_phone, (const char *)at_phone1); strcat((char *)at_phone,(const char *)PHONEBUFF2); strcat((char *)at_phone, (const char *)at_phone3); UART_PutStr(0,(char *)at_phone); 下面是字符数组与字符串参考资料: c语言字符数组与字符串的使用详解 本篇文章是对c语言中字符数组与字符串的使用进行了详细的分析介绍,需要的朋友参考下 1、字符数组的定义与初始化 字符数组的初始化,最容易理解的方

文档评论(0)

teda + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档