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

上传人:cl****1 文档编号:512152623 上传时间:2023-03-06 格式:DOC 页数:9 大小:438KB
返回 下载 相关 举报
基于MSP430的防盗报警系统GSM学习笔记_第1页
第1页 / 共9页
基于MSP430的防盗报警系统GSM学习笔记_第2页
第2页 / 共9页
基于MSP430的防盗报警系统GSM学习笔记_第3页
第3页 / 共9页
基于MSP430的防盗报警系统GSM学习笔记_第4页
第4页 / 共9页
基于MSP430的防盗报警系统GSM学习笔记_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《基于MSP430的防盗报警系统GSM学习笔记》由会员分享,可在线阅读,更多相关《基于MSP430的防盗报警系统GSM学习笔记(9页珍藏版)》请在金锄头文库上搜索。

1、用MSP430F149单片机开发GSM模块变压器报警系统学习笔记2015年1月29日18:15:20 目录:1、 GSM模块总是发送信息到串口2、 按键中断无法退出的问题3、 Flash写入问题4、 字符数组和字符串的拼接问题。字符数组与字符串参考资料1、GSM模块总是发送信息到串口 发送的数据如下图:问题的原因是GSM模块频繁的重启导致的,一部分原因可能是电脑的USB接口电压不稳定,导致的GSM模块工作欠压状态,故而频繁重启。这个需要在后期注意。2、按键中断无法退出的问题按键是普通中断,但是却出现了进入中断却无法退出的问题。这个问题,出在了延时函数上,我选择的延时函数是利用定时器的,这个函数

2、可能在中断函数中影响了中断标志,故而无法退出中断。解决方法是使用普通的延时函数,不使用定时器就好了。3、Flash写入问题在对Flash写入时,使用的是别人写好的库函数,这个库函数有个问题,问题就是每次写一位数据,就会相应的将前面的数据都清除掉。例如:在F0x1000位置写字符“a”,在F0X1001位置写字符“b”,在F0X1002位置写“c”。得到的结果就是“ c”。前面的数据都变成了0X00,被清空了。我们看一下程序:void Flash_WriteB(uchar *address,uchar data8)/FCTL1 = 0xA500+0x0002; /允许擦除FCTL3 = 0xA5

3、00; /解锁/*address = 0; /启动擦除FCTL1 = 0xA500+0x0040; /允许写*address = data8; /写入数据FCTL1 = 0xA500;FCTL3 = 0xA500+0x0010; /锁定 原因是开启了擦除指令,擦除指令把原来的数据都给擦除了。按理说,这个擦除指令应该只是擦除一个位置的数据,但是,却对其他位置的数据都给擦除了。所以,修改原函数,将原函数中的内容禁止擦除,这样,就解决了其他问题数据再写入新数据时被擦掉了。4、字符数组和字符串的拼接问题。首先,怎样拼接一个字符串?我使用的方法是 (先包含一下string.h头文件) 定义一个足够长度的

4、字符串空间,uchar test111; Uchar *set=”SET”;Uchar *read=”READ”; strcpy(test1,set);strcat(test1,read); 第一条语句是把set字符串的内容复制到test1当中去,然后,利用第二条指令,就是把第二个字符拼接到第一个字符串中去,拼接时,自动去掉第一个字符串末尾的0,并在重新拼接的字符串后面添加一个0。当我把set部分换成是一个字符串数组时,即uchar set11;时,使用同样的方法拼接字符串,得到的结果还是相似,但是却无法使用字符串发送函数(即以0为末尾识别的函数)。因为字符数组的默认是不包含0的。我们定义一个

5、字符数组uchar set3=s,e,t;,这种定义并赋值方式,和uchar set3;这种定义方式,实际的有效数据就是3,而字符数组的长度也是3.这个字符数组的末尾,没有0。故而导致发送函数出错。我们应该如何定义字符数组呢?我们应该让字符数组的最后一位多一个0,这样发送函数才会不至于出错。我们可以这样定义:uchar set4=;我们多给字符数组了一位空间,这个空间,就是字符数组用来存放0的。而我们在定义的时候,给字符数组赋值成了一个空的字符串,这样,每一个字符串的末尾都必定是0,所以,我们的字符数组set3的数据就一定是0,只要我们在后期处理函数中,不把这位数据给修改掉,这样,我们得到的最

6、新字符数组的末尾就有了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语言中字符数组与字符串的使用进行了详细的分析介绍,需要的朋友参考

7、下1、字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。char str10= I, ,a,m, ,h,a,p,p,y;即把10个字符分别赋给str0到str910个元素如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 0 )。2、字符数组与字符串在c语言中,将字符串作为字符数组来处理。(c+中不是)在实际应用中人们关心的是有效字符串的长度而不是字符数组的长度, 例如,定义一个字符数组长度为100,而实际有效字符只有40个,为了测定字符串的实际长度,C语言规定了一个“字符

8、串结束标志”,以字符0代表。 如果有一个字符串,其中第10个字符为0,则此字符串的有效字符为9个。也就是说,在遇到第一个字符0时,表示字符串结束,由它前面的字符组 成字符串。系统对字符串常量也自动加一个0作为结束符。例如C Program”共有9个字符,但在内存中占10个字节,最后一个字节0是系统自动加上的。(通过sizeof()函数可验证)有了结束标志0后,字符数组的长度就显得不那么重要了,在程序中往往依靠检测0的位置来判定字符串是否结束,而不是根据数组的长度来决定字符串长度。当然,在定义字符数组时应估计实际字符串长度,保证数组长度始终大于字符串实际长度。(在实际字符串定义中,常常并不指定数

9、组长度,如char str )说明:n代表ASCII码为0的字符,从ASCII码表中可以查到ASCII码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不干。用它来作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标志。对C语言处理字符串的方法由以上的了解后,再对字符数组初始化的方法补充一种方法即可以用字符串常量来初始化字符数组:char str =I am happy; 可以省略花括号,如下所示char str =I am happy;注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下

10、面的赋值方法是错误的 char str ; str=I am happy;不是用单个字符作为初值,而是用一个字符串(注意:字符串的两端是用双引号“”而不是单引号括起来的)作为初值。显然,这种方法更直观方便。(注意:数组str的长度不是10,而是11,这点请务必记住,因为字符串常量I am happy的最后由系统自动加上一个0) 因此,上面的初始化与下面的初始化等价char str =I, ,a,m, ,h,a,p,p,y,0;而不与下面的等价char str =I, ,a,m, ,h,a,p,p,y;前者的长度是11,后者的长度是10.说明:字符数组并不要求它的最后一个字符为0,甚至可以不包含

11、0,向下面这样写是完全合法的。char str5=C,h,i,n,a;+可见,用两种不同方法初始化字符数组后得到的数组长度是不同的。#include void main(void)char c1=I, ,a,m, ,h,a,p,p,y;char c2=I am happy;int i1=sizeof(c1);int i2=sizeof(c2);printf(%dn,i1);printf(%dn,i2);结果:10 113、字符串的表示形式在C语言中,可以用两种方法表示和存放字符串:(1)用字符数组存放一个字符串char str =I love China;(2)用字符指针指向一个字符串char

12、* str=I love China;对于第二种表示方法,有人认为str是一个字符串变量,以为定义时把字符串常量I love China直接赋给该字符串变量,这是不对的。C语言对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来存放字符串常量,程序在定义字符串指针变量str时只是把字符串首地址(即存放字符串的字符数组的首地址)赋给str。两种表示方式的字符串输出都用printf(%sn,str);%s 表示输出一个字符串,给出字符指针变量名str(对于第一种表示方法,字符数组名即是字符数组的首地址,与第二种中的指针意义是一致的),则系统先输出它 所指向的一个字符数据,然后自动使str

13、自动加1,使之指向下一个字符.,如此,直到遇到字符串结束标识符 0 。4、对使用字符指针变量和字符数组两种方法表示字符串的讨论虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈。4.1、字符数组由若干个元素组成,每个元素放一个字符;而字符指针变量中存放的是地址(字符串/字符数组的首地址),绝不是将字符串放到字符指针变量中(是字符串首地址)4.2、赋值方式: 对字符数组只能对各个元素赋值,不能用以下方法对字符数组赋值 char str14; str=I love China; (但在字符数组初始化时可以,即char str14=I love China

14、;) 而对字符指针变量,采用下面方法赋值: char* a; a=I love China; 或者是 char* a=I love China; 都可以4.3、对字符指针变量赋初值(初始化): char* a=I love China; 等价于: char* a; a=I love China;而对于字符数组的初始化 char str14=I love China;不能等价于: char str14; str=I love China; (这种不是初始化,而是赋值,而对数组这样赋值是不对的)4.4、如果定义了一个字符数组,那么它有确定的内存地址;而定义一个字符指针变量时,它并未指向某个确定的字符数据

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号