您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > msp430单片机入门知识
前沿1、《MSP430系列单片机系统工程设计与实践》这本书是我见过的最好的关于单片机的书,非常值得逐字逐句的彻底学习一遍。2、与51不同,MSP430单片机是RISC处理器,通过对比两者的区别,可以建立起代码移植的思想。3、MSP430单片机属于混合信号处理器,资源极其丰富,有利于全面学习硬件知识。青岛大学-TI大学生创新中心傅强21.1初识MSP430单片机MSP430:低功耗之王,水果电池驱动1、为什么我们在乎功耗?①凡是以电池为电源的电子设备都看重低功耗。②几乎所有的单片机会标榜自己有低功耗方面的设计。2、MSP430为什么可以成为低功耗之王?①在硬件上,cpu和不用的模块可以休眠②在软件上,必须设计恰当的休眠和唤醒③430是实现低功耗的必要条件,非充分条件。青岛大学-TI大学生创新中心傅强31.1.1MSP430单片机的应用前景便携设备,高集成度、小型化。野外安置的终身电池设备。无需额外供电的自供电设备。高精度测量、控制领域。当普通单片机用。青岛大学-TI大学生创新中心傅强41.1.2MSP430单片机的特点多时钟系统①CPU时钟、功能模块时钟、休眠唤醒时钟②软件设置时钟16位RISC处理器,单指令周期模块化结构①各模块完全独立,不需要cpu干涉②避免了cpu与外部模块复杂的数据通信③学会最贵的430,等于会用了全系列430青岛大学-TI大学生创新中心傅强5采用冯∙诺依曼结构(普林斯顿结构),程序指令存储器和数据存储器统一编址。①举例:实现存储器中两数据相乘,要经过3个步骤,通过总线取两个数据和取出指令(干什么)到CPU。②如果是哈佛结构,数据总线和指令总线分开。③430可以在ram里跑程序,加上具有flash控制器,可实现固件更新。④rom中的升级代码-复制到ram运行-擦除rom-升级rom1.1.2MSP430单片机的特点青岛大学-TI大学生创新中心傅强6科普:ROM、RAM、DRAM、SRAM、EEPROM、FLASH存储器挥发性存储器非挥发性存储器RAM可擦写只读SRAMDRAMEPROMEEPROMFLASHROM速度最高最贵要定时刷新紫外线擦写电擦写电擦写PROM计算机CPU一二级缓存计算机内存条绝种ing贵,慢前途无量绝种了6个晶体管构成1bit一个晶体管+电容充放电Floatinggatetransistera)我们现在用的51,都是flashrom的,但是内部没有flash控制器,所以需要EEPROM存实时数据。b)Msp430带flash控制器,单片机自己就能擦写flash,所以不用EEPROM。青岛大学-TI大学生创新中心傅强7MSP430FE425A资源1.8M/s处理速度2.512RAM(数据)+16KBFlash(程序代码)3.内置Flash控制器,剩余Flash可存数据。4.内置时钟管理单元,可内部倍频5.3路同步采样、差分输入、32倍程控增益放大器的16位ADC6.温度传感器7.1.2V基准源和输出缓冲器8.128段LCD驱动器9.增强UART串口10.看门狗11.BasicTimer定时器12.16位TimeA定时器,3路捕获和2路PWM13.内置BOR复位电路14.16个双向可中断IO口15.内置电能计量模块16.后缀带A的,比如FE425A带硬件乘法器青岛大学-TI大学生创新中心傅强81.1.3MSP430单片机最小系统一般单片机最小系统需要什么?电源、晶振、复位、下载/仿真接口MSP430FE425自带片内数控时钟(DCO),掉电复位电路(BOR)一般讲究一点都需要“电源监视芯片”内部时钟一般不如晶振精确可以外接手表晶振32.768k,然后倍频JTAG、SBW、可下载+调试,BSL只能下载青岛大学-TI大学生创新中心傅强91.2MSP430单片机开发软件入门一般用IAR430软件工程管理、程序编辑、代码编译下载、仿真调试工程管理:管理外部函数、头文件。。。程序编辑:写代码编译:替程序员处理所有打杂的事情C-汇编调试:真正的考验水平的地方,不是所有单片机都支持调试,这是要硬件支持的。青岛大学-TI大学生创新中心傅强10全速执行、单步执行。。。执行到光标处设置断点(在程序中加一个空操作,然后用来设断点)查看变量寄存器查看调用函数关系青岛大学-TI大学生创新中心傅强111.3MSP430单片机C语言基础C语言、编译器和机器码之间的关系Main(){...}C语言源文件VC编译器PC(8086)机器码ICC430编译器MSP430单片机机器码Keil-C51编译器51单片机机器码在写C语言的过程中,尽量消除不同CPU的差异,或者将差异集中到一个地方做修改,那么就能方便的实现代码移植。我们现在写C程序,就必须按此要求严格要求自己。这样才能一通百通,才能减少重复劳动。青岛大学-TI大学生创新中心傅强121.3.1变量我们为什么要定义各种变量?定义短字节变量有哪些好处和坏处?定义长字节变量有哪些好处和坏处?一些特殊的关键字constunsignedcharTable[7]={1,2,3,4,5,6,7}staticinta;//本地全局变量volatileintb;//不被优化_no_initintc;//不对其初始化为什么要慎重使用全局变量?青岛大学-TI大学生创新中心傅强131.3.2数学运算尽可能避免浮点数运算。①运算慢、非常慢。占用RAM多。②所以应尽量避免使用浮点数float。防止定点数溢出。longintx;inta;x=a*1000;//a和1000都是int型,a65溢出应改为x=a*long(1000)或x=(long)a*1000青岛大学-TI大学生创新中心傅强14小数的处理例如,温度的最后计算公式为:Deg_C=ADC*1.32/1.25-273为避免浮点数可改为:Deg_C=(long)ADC*132/125-273如需保留1位小数,则:Deg_C=(long)ADC*1320/125-2730//扩大10倍程序中加上明确注释在显示时,将小数点移位即可减小乘除法①取平均时,尽量取2、4、8等2次幂,这样可以用移位代替乘除(可编译器自动)②后缀带A的型号有硬件乘法器(自动使用)青岛大学-TI大学生创新中心傅强151.3.3位操作精简指令处理器如何写IO口?P2OUT=P2OUT|0x01;//P2.0置高按位或P2OUT|=0x01;//一般均简写成这样P2OUT&=~0x01;//P2.1置低按位与P2OUT^=0x04;//P2.2取反按位异或#defineBIT0(0x01)//宏定义......P2OUT|=BIT0;//P2.0置高P1OUT&=~(BIT1+BIT2+BIT3)//P1.1P1.2P1.3置低精简指令处理器如何读IO口?charKey;If((P1IN&BIT5)==0)P2OUT|=BIT0;If(P1IN&BIT5)P2OUT|=BIT0;If(P1IN&(BIT5+BIT6))P2OUT|=BIT0;If(P1IN&BIT5)Key=1;//读P1.5值赋给KeyelseKey=0;青岛大学-TI大学生创新中心傅强161.3.4寄存器操作如何理解寄存器操作?①如果设计模拟电路算是天才干的事情,那么操作单片机的寄存器就算是傻瓜干的事情。②处理器把能干的事全干了,需要人过问的事情,通过一系列开关让人来选择,所以这是傻瓜就能干的事情越是功能强大的处理器,需要配置的寄存器越多。处理器说明书就是用来查寄存器功能的青岛大学-TI大学生创新中心傅强17宏定义帮助我们理解抽象的数字查说明书,找到控制串口收发的是IE1寄存器的最高两位,我们可以用下面的赋值。IE1|=BIT6//开串口收中断IE1|=BIT7//开串口发中断为便于记忆和理解,头文件中有如下宏定义:#defineURXIE0(0x40)//在MSP430x42x.h#defineUTXIE0(0x80)//头文件中已有IE1|=URXIE0+UTXIE0以后我们接触高级处理器的程序中,大部分都是这么写,不会像51里面直接写TMOD=0x20这样青岛大学-TI大学生创新中心傅强18特别注意:使用“|=”赋值不会影响其他位,但要搞清楚是不是要先对标志位清0。例如:PWM控制器输出模式有3个控制位,可以表示8种模式。头文件中定义了OUTMODE_0~OUTMODE_7宏定义,000-111。TACCTL1|=OUTMODE_3;//011...TACCTL1|=OUTMODE_6;//110实际效果是111,也就是模式7青岛大学-TI大学生创新中心傅强191.3.5中断中断的作用是快速响应事件430中几乎所有“资源”都带中断,为的是休眠cpu后,唤醒CPU。Cpu发送指令给模块,然后休眠。模块执行完毕后,中断唤醒CPU。中断向量表位于ROM最高段0xFE00~0xFFFF(512B)特别注意!430的中断没有中断嵌套的优先级#pragmavector=BASICTIMER_VECTOR__interruptvoidBT_ISR(void){...}青岛大学-TI大学生创新中心傅强20Msp430x42x头文件中的中断向量表#defineBASICTIMER_VECTOR(0*2u)/*0xFFE0基础定时器)PORT2_VECTOR(1*2u)/*0xFFE2P2*/PORT1_VECTOR(4*2u)/*0xFFE8P1*/TIMERA1_VECTOR(5*2u)/*0xFFEATimerACCR1/2*/TIMERA0_VECTOR(6*2u)/*0xFFECTimerACCR0*/USART0TX_VECTOR(8*2u)/*0xFFF0串口发送*/USART0RX_VECTOR(9*2u)/*0xFFF2串口接收*/WDT_VECTOR(10*2u)/*0xFFF4WatchdogTimer*/SD16_VECTOR(12*2u)/*0xFFF816位ADC*/NMI_VECTOR(14*2u)/*0xFFFCNon-maskable*/RESET_VECTOR(15*2u)/*0xFFFEReset*/青岛大学-TI大学生创新中心傅强21中断的具体过程1.事先将中断服务程序入口地址装入中断向量表。2.中断发生后,如果中断被允许(可屏蔽中断),CPU将当前程序地址和CPU状态寄存器SR压入堆栈。3.跳转到中断服务程序入口,备份寄存器入堆栈。4.开始执行中断服务程序。5.退出中断前,恢复寄存器。CPU取回SR寄存器,跳转回中断前主程序地址。青岛大学-TI大学生创新中心傅强22退出中断时唤醒CPU进中断前CPU休眠,那么退出中断后CPU仍然休眠。可以在中断子程序中修改堆栈中的SR,使得中断结束后,CPU不休眠。#pragmavector=BASICTIMER_VECTOR__interruptvoidBT_ISR(void){...__low_power_mode_off_on_exit();//此函数经汇编优化}青岛大学-TI大学生创新中心傅强23中断标志位同类中断合并成一个总的中断。由软件判断中断标志位flag来确定具体中断。什么是标志位?不急用、待查询。#pragmavector=PORT1_VECTOR__interruptvoidP1_ISR(void){if(P1IFG&BIT5){...}if(P1IFG&BIT6){...}P1IFG=0;}青岛大学-TI大学生创新中心傅强241.3.6内部函数头文件instrinsic.h和in430.h__low_power_mode_0();或LPM0__low_power_mode_off_on_exit();__delay_cycles(longintcycles);__enable_interrupt();或_EINT();__diaable_interrupt();或_DINT;__
本文标题:msp430单片机入门知识
链接地址:https://www.777doc.com/doc-4319920 .html