MSP430单片机原理.ppt_第1页
MSP430单片机原理.ppt_第2页
MSP430单片机原理.ppt_第3页
MSP430单片机原理.ppt_第4页
MSP430单片机原理.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章 MSP430单片机原理,2.1 MSP430F249单片机基本结构与原理 MSP430F249的主要结构特点 供电电压范围 1.8V3.6V。 超低功耗:活动状态270uA(1MHz,2.2V);待机模式0.3uA;关机模式0.1uA。 16位RISC精简指令集处理器。 时钟系统:多种时钟源,可灵活使用。时钟频率达到16MHz;具有内部振荡器;可外接32kHz低频晶振;外接时钟输入。,12位A/D转换器,内部参考电压,采用保持电路。 16位定时器A,3个捕获/比较寄存器。 16位定时器B,7个捕获/比较寄存器。 4个通用串口:USCI_A0和USCI_A1、USCI_B0和USCI_B1(I2C、SPI)。 60kB+256B的flash程序存储器,2kB的RAM数据存储器。 64引脚QFP封装。,MSP430F249的主要结构特点,MSP430F24x系列单片机功能结构示意图,MSP430F249单片机引脚图,(1)CPU简介,MSP430单片机的CPU为16位RISC精简指令集的处理器,只有27条正交汇编指令和7种寻址方式。RISC处理器基本上是为高级语言所设计的,编译程序对正交指令系统很容易做到最优化,利于产生高效紧凑的代码。MSP430CPU中集成了16个16位通用寄存器R0R15,其中R0R3分别复用为程序指针PC、堆栈指针SP、状态寄存器SR和常数发生器CG1/CG2。这些寄存器之间的操作只需要一个CPU周期。,1)程序计数器(PC指针)也就是CPU专用寄存器R0,PC指针是一个16位寄存器,可以寻址64kB的空间。MSP430单片机的指令长度以字(16位)为最小单位,而程序存储器单元以字节(8位)为单位,所以PC的值总是偶数。,2)堆栈指针SP为CPU专用寄存器R1,SP指针为16为寄存器,也总是偶数的。堆栈是在片内RAM中实现的,通常将堆栈指针设置为片内RAM的最高地址加一。使用C语言编程时,集成编译软件IAR会自动设置堆栈指针初始值。对程序员来说无需关心细节,编译结束后在信息窗提示的编译结果会给出 RAM 使用量的大小,只要不超过 RAM 区实际容量并稍留余量给堆栈用即可。使用汇编语言编程时必须注意堆栈指针的正确设置,否则堆栈可能会覆盖你的变量区,导致程序出错。,(2)片内存储器 MSP430单片机采用冯诺依曼结构,程序存储器flash、数据存储器RAM、特殊功能寄存器以及中断向量全部映射到64kB内部地址空间。MSP430不同型号单片机地址空间略有不同,MSP430F249的存储器结构如表2-2所示。,表2-3工作模式表,2.2 MSP430单片机的C语言基础,C语言是一种结构化的高级语言,其优点是语言简洁、表达能力强、使用方便灵活、可读性好、可移植性强。C语言程序本身不依赖单片机硬件,如果更改工程项目中的单片机型号,对C语言程序稍加修改就可以进行程序移植,而且移植程序时不一定要求程序开发人员详细掌握新型号单片机的指令系统。 C语言程序的书写格式十分自由。一条语句可以写成一行,也可以写成几行;还可以在一行内写多条语句;但是需要注意的是,每条语句都必须以分号“;”作为结束符。,为了C语言程序能够书写清晰,便于阅读、理解和维护,在书写C语言程序时最好遵循以下规则。 a)一个声明或一条语句占一行; b)不同结构层次的语句,从不同的起始位置开始,机缩进相同的字数; c)用括起来的部分表示程序的某一层次结构。,1)C语言的标识符是用来标识源程序中某个对象名字的。这些对象可以是函数、变量、常量、数组、数据类型、存储方式、语句等。一个标识符由字符串、数字和下划线等组成,第一个字符必须是字母或下划线,通常以下划线开头的标识符是编译系统专用的,因此在编写C语言源程序时一般不要使用以下划线开头的标识符,而将下划线用作分段符。标识符的长度由系统决定,标识符最长可达255个字符,编写源程序时标识符的长度不要超过 32个字符。,2)关键字是一类具有固定名称和特定含义的特殊标识符,又称为保留字。在编写C语言源程序时一般不允许将关键字另作别用,换句话说就是对于标识符的命名不要与关键字相同。上面表2.4所列的C语言关键字由系统保留不能用作用户标识符。 3)程序中对于标识符的命名应当简洁明了,含义清晰,便于阅读理解,如用标识符“max”表示最大值,用“TIMER0”表示定时器0等。尽量不要取名“aa”、 “bb”等等没有特定意义的标识符,这样虽然没有违反C语言的规则,但是在程序里就很不容易理解。,4)C语言区分大小写字母,C语言编译器在对程序进行编译时,对于程序中同一个字母的大小写作为不同的变量来处理。例如定义一个延时函数的形式参数time,但是如果程序当中再出现一个由大写字母定义的标识符TIME,那么它们在程序当中是两个不同的标识符,是没有冲突的。 5)C语言程序中有且只有一个main函数,一个C语言程序,无论main函数的物理位置在那里,总是从main函数开始执行。,6)每句程序语句后面一定要加分号,分号是C语言结构的一部分,如果缺少了就会语法出错。 7)注释,在程序中添加注释是为了能更加容易读懂和理解程序,IAR有两种风格的注释方法“/”和“/*-*/”。 “/”的意思是在其后面的全部引导为注释,而“/*-*/”的意思是在“/*”开始,一直到遇到“*/”为止,在其里面的内容都被认为是注释。,Float和double的指数位是按补码的形式来表示的,所以float的指数范围为-128+127,而double的指数范围为-1024+1023。float的范围为-2128 +2128,也即-3.40E+38 +3.40E+38;double的范围为-21024 +21024,也即-1.79E+308 +1.79E+308。 float和double的精度是由尾数的位数来决定的。float:223 = 8388608,一共七位,这意味着最多能有7位有效数字,float的精度为7位; double:252 = 4503599627370496,一共16位,double的精度为16位。,const:定义常量。在 C430 语言中,const关键字定义的常量实际上被放在了 程序存储器flash中,经常用const关键字定义显示表之类的常数数组。 extern:声明外部变量,外部变量是指在函数或文件外部定义的全局变量。使用时,extern置于变量或函数前,表示变量或函数的定义在别的文件中,提示编译器在遇到此变量和函数时在其他模块中寻找它的定义, static :定义静态局部变量或静态函数,静态局部变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见。有时候希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下次该函数调用时,该变量保留上一次函数调用结束时的值。这时就应该指定局部变量为静态局部变量。,全局变量:只要定义在函数体(包括主函数)外,就是全局变量了,编译器为全局变量安排特定的数据区,这些数据区为全局变量专用。全局变量一般定义在C程序的开头部分、主函数之前,在与该程序有关的所有文件都可以使用该变量。程序开始时分配空间,程序结束时释放空间,默认初始化为0。对于多文件C语言程序,如果全局变量定义在其它文件中,那么别的程序文件里面的函数要访问另一个文件里面的全局变量,须在对全局变量进行外部变量声明,关键词extern。 局部变量是在一个函数内部定义的变量,它只在定义它的那个函数范围以内有效,在此函数之外局部变量即失去意义,因而也就不能使用这些变量了。不同的函数可以使用相同的局部变量名,由于它们的作用范围不同,不会相互干扰。函数的形式参数也属于局部变量。局部变量在每次函数调用时分配存储空间,在每次函数返回时释放存储空间。,自增、自减运算符说明: +i 意思是:i自增1后再参与运算。 -i 意思是:i自减1后再参与运算。 i+ 意思是:i参与运算后,i的值再自增1。 i- 意思是:i参与运算后,i的值再自减1。 复合赋值运算符说明: 在赋值运算符“”的前面加上其它运算符,就构成了所谓复合赋值运算符。 + 加法赋值, 右移位赋值,-减法赋值, 逻辑与赋值, * 乘法赋值,逻辑或赋值,除法赋值, 逻辑异或赋值, 取模赋值, 逻辑非赋值, 左移位赋值。,1)尽可能避免浮点运算。对于单片机来说,浮点数的运算速度很慢, RAM开销也大,且有效位数有限;在低功耗应用中CPU运算时间直接关系到平均功耗。因此在编程初期就要养成尽量避免使用浮点数的习惯。 2)防止定点数溢出。定点数运算首先要防止数据溢出。 3)小数的处理。遇到需要保留小数的运算,可以采用浮点数,但是软件开销较大。用定点数也可以处理小数。原理就是先扩大,再运算。 4)尽量减少乘除法。430 单片机没有乘法/除法指令,乘除操作会被编译器转换成移位和加法来实现。如果乘除的数值刚好是 2 的幂,那么可以用移位直接替代乘除法,运算速度会提高很多。,例如将 P1.0 置高、将 P1.1 置低,将 P1.2 取反,我们可以写成: P1OUT |= 0x01; /P2.0 置高 P1OUT /P1.1/2/3/4 全置高,char Key; if(P1IN /读取 P1.5 状态赋给变量 Key。,函数是C语言中的一种基本模块。在进行程序设计的过程中,如果所设计的程序较大,一般应将其分成若干个子程序模块,每个子程序模块完成一种特定的功能。在C语言中,子程序是用函数来实现的。对于一些需要经常使用的子程序可以按函数来设计,以供反复调用。此外,EW430编译器还提供了丰富的运行库函数,用户可以根据需要随时调用。这种模块化的程序设计方法,可以大大提高编程效率。 从用户的角度来看,有两种函数:标准库函数和用户自定义函数。标准库函数是IAR EW430编译器提供的,不需要用户进行定义,可以直接调用。用户自定义函数是用户根据自己的需要编写的能实现特定功能的函数,它必须先进行定义之后才能调用。,指针是C语言中一个十分重要的概念,也是C语言的一个难点,曾经有许多人这样讲过,要精通指针的程序员才算正真懂得C语言。只要掌握指针,才能使程序变得更加简洁、紧凑、高效,在C语言当中指针可以谈得上是全部精华的所在。初学者在开始学习时可能会有一点不习惯但是不要灰心,只要我们在平时多思考、多上机,那么很快就可以掌握它了。 所谓指针就是指内存中的地址,它可能是变量的地址,也可能是函数的入口地址。如果指针变量存储的地址是变量的地址,则称为变量的指针,简称变量指针;如果指针变量存储的地址是函数的入口地址,则称为函数的指针,简称函数指针。 变量的指针就是该变量的地址,可以定义一个指向某个变量的指针变量。为了表示指针变量和它所指向的变量地址之间的关系,C语言提供了两个专门的运算符: * 取内容, 取地址。,C语言程序的开始部分通常是预处理命令,如程序中通常遇到的include命令。这个预处理命令通知编译器在对程序进行编译时,将所需要的头文件读入后再一起进行编译。一般在“头文件”中包含有程序在编译时的一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论