MSP430简介(超详细·).doc_第1页
MSP430简介(超详细·).doc_第2页
MSP430简介(超详细·).doc_第3页
MSP430简介(超详细·).doc_第4页
MSP430简介(超详细·).doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

msp430简介MSP430是德州公司新开发的一类具有16位总线的带FLASH 的单片机,由于其性价比和集成度高,受到广大技术开发人员的青睐.它采用16位的总线,外设和内存统一编址,寻址范围可达64K,还可以外扩展存储器.具有统一的中断管理,具有丰富的片上外围模块,片内有精密硬件乘法器、两个16位定时器、一个14路的12位的模数转换器、一个看门狗、6路P口、两路USART通信端口、一个比较器、一个DCO内部振荡器和两个外部时钟,支持8M 的时钟.由于为FLASH型,则可以在线对单片机进行调试和下载,且JTAG口直接和FET(FLASH EMULATION TOOL)的相连,不须另外的仿真工具,方便实用,而且,可以在超低功耗模式下工作对环境和人体的辐射小,测量结果为100mw左右的功耗(电流为14mA左右),可靠性能好,加强电干扰运行不受影响,适应工业级的运行环境,适合与做手柄之类的自动控制的设备.我们相信MSP430单片机将会在工程技术应用中得以广泛应用,而且,它是通向DSP系列的桥梁,随着自动控制的高速化和低功耗化, MSP430系列将会得到越来越多人的喜爱.一、IO口(一)、P口端口寄存器:1、PxDIR 输入/输出方向寄存器(0:输入模式 1:输出模式)2、PxIN 输入寄存器输入寄存器是只读寄存器,用户不能对其写入,只能通过读取该寄存器的内容知道I/O口的输入信号。3、PxOUT 输出寄存器寄存器内的内容不会受引脚方向改变的影响。4、PxIFG 中断标志寄存器(0:没有中断请求 1:有中断请求)该寄存器有8个标志位,对应相应的引脚是否有待处理的中断请求;这8个中断标志共用一个中断向量,中断标志不会自动复位,必须软件复位;外部中断事件的时间必须=1.5倍的MCLK的时间,以保证中断请求被接受;5、PxIES 中断触发沿选择寄存器 (0:上升沿中断 1:下降沿中断)6、PxSEL 功能选择寄存器 (0:选择引脚为I/O端口 1:选择引脚为外围模块功能)7、PxREN 上拉/下拉电阻使能寄存器 (0:禁止 1:使能)(二)、常用特殊P口: 1、P1和P2口可作为外部中断口。 2、P6可作为A/D输入口。 3、P1.2和P2.0可作为PWM波输出口。 4、P1.1:MCLK P1.5:ACLK 5、串口通信时:P2.4、 P4.0为发送TXD, P2.5 、P4.1为接收RXD。(三)、基本操作:1、所有P口都可作为通用IO口使用2、所有P口都可进行字节操作和位操作 按字节操作: 例: P1DIR=0xff; /将P1口作为输出口 PIOUT=0x20; / P1口输出0x20 P1DIR=0x00; /将P1口作为输入口 data=P1IN /读取P1口外部输入值 按位操作: 例: P1DIR=BIT0; /将P1.0作为输出口 P1OUT|=BIT0; /P1.0输出1 P1OUT&=BIT0; /P1.0输出0 P1DIR&=BIT0 /将P1.0口作为输入 data=P1IN&BIT0 /读取P1.0口外部输入值二、时钟(一)、三个时钟源:1、LFXT1CLK:低频时钟(32768HZ)2、XT2CLK:高频时钟(8MHZ)3、DCOCLK:片内数控振荡器最高46MHZ,但不稳定(不能作为定时用)(二)、时钟模块结构图:(三)、时钟模块可提供的四种时钟信号:1、ACLK:辅助时钟,来自LFXT1CLK低频时钟,可有软件选作各外围模块的时钟信号,一般用于低速外设。2、ACLK/n:ACLK经过1、2、4、8分频后由P1.5输出,仅供外部电路使用。3、MCLK:系统主时钟,可有软件选择来自LFXT1CLK、XT2CLK或DCOCLK的时钟,然后经1、2、4、8分频得到。可由P1.1输出(主要用于cpu)4、SMCLK:子系统时钟,可有软件选择来自XT2CLK或DCOCLK的时钟。(主要用于高速外设)(四)、MCLK应用举例:1、在默认情况下,MCLK来自于DCOCLK其频率为1.048576MHZ其计算方法:MCLK=(31+1)*327682、如何选择ACLK作为MCLK:void clk_initial()doIFG1&=OFIFG; /清除振荡器的失效标志_ delay_cycles(200);while(IFG1&OFIFG)!=0); /如果振荡器的失效标志存在FLL_CTL1=SELM1+SELM0; /选择ACLK作为MCLK3、如何选择 XT2CLK作为MCLK:void clk_initial()doIFG1&=OFIFG; /清除振荡器的失效标志_delay_cycles(200);while(IFG1&OFIFG)!=0); /如果振荡器的失效标志存在FLL_CTL1=SELM1; /选择XT2CLK作为MCLK 4、如何选择 DCOCLK作为MCLK:计算(121+1) *2*32768=7.995MHZvoid CLK_initial()SCFI0|=FN_4; /选择DCO频率调整范围为2.826.6MHZSCFQCTL=249; /倍频倍数,最高位为DCO+调制器的控制位FLL_CTL0=DCOPLUS+OSCCAP_1; /选择DCO作为MCLK前分频 三、中断(一)、中断源:1、外部中断:P1、P2 2、定时器中断。3、看门狗定时器中断。 4、串口中断。5、A/D 转换中断。 6、比较器中断。(二)、中断的一般设置:1、打开、关闭局部中断:打开局部中断一般是给想关的特殊功能寄存器相关位置1以P1口外部中断为例:打开局部中断:P1IE|=BIT0;/打开P1.0外部中断关闭局部中断一般是给想关的特殊功能寄存器相关位置0同样以P1口外部中断为例:关闭局部中断:P1IE&=BIT0;/关闭P1.0外部中断2、打开、关闭全局中断:_EINT();/打开总中断,相当于51的EA=1;_DINT();/关闭总中断,相当于51的EA=0;3、各中断向量Interrupt Vectors:#define BASICTIMER_VECTOR (0 * 2u) /* 0xFFE0 Basic Timer */#define PORT2_VECTOR (1 * 2u) /* 0xFFE2 Port 2 */#define USART1TX_VECTOR (2 * 2u) /* 0xFFE4 USART 1 Transmit */#define USART1RX_VECTOR (3 * 2u) /* 0xFFE6 USART 1 Receive */#define PORT1_VECTOR (4 * 2u) /* 0xFFE8 Port 1 */#define TIMERA1_VECTOR (5 * 2u) /* 0xFFEA Timer A CC1-2, TA */#define TIMERA0_VECTOR (6 * 2u) /* 0xFFEC Timer A CC0 */#define ADC12_VECTOR (7 * 2u) /* 0xFFEE ADC */#define USART0TX_VECTOR (8 * 2u) /* 0xFFF0 USART 0 Transmit */#define USART0RX_VECTOR (9 * 2u) /* 0xFFF2 USART 0 Receive */#define WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */#define COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6 Comparator A */#define TIMERB1_VECTOR (12 * 2u) /* 0xFFF8 Timer B CC1-6, TB */#define TIMERB0_VECTOR (13 * 2u) /* 0xFFFA Timer B CC0 */#define NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maskable */#define RESET_VECTOR (15 * 2u) /* 0xFFFE Reset Highest Priority */4、中断优先级:优先级顺序从高到低为:PORT2_VECTOR (1 * 2u) /* 0xFFE2 Port 2 */PORT1_VECTOR (4 * 2u) /* 0xFFE8 Port 1 */TIMERA1_VECTOR (5 * 2u) /* 0xFFEA Timer A CC1-2, TA */TIMERA0_VECTOR (6 * 2u) /* 0xFFEC Timer A CC0 */ADC_VECTOR (7 * 2u) /* 0xFFEE ADC */USART0TX_VECTOR (8 * 2u) /* 0xFFF0 USART 0 Transmit */USART0RX_VECTOR (9 * 2u) /* 0xFFF2 USART 0 Receive */WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6 Comparator A */TIMERB1_VECTOR (12 * 2u) /* 0xFFF8 Timer B CC1-2, TB */TIMERB0_VECTOR (13 * 2u) /* 0xFFFA Timer B CC0 */NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maskae */RESET_VECTOR (15 * 2u) /* 0xFFFE Reset Highest Priority */5、中断的嵌套:当同时有多个中断来的时候才有优先级的考虑(优先级顺序可查看向量表)实现中断嵌套需要注意以下几点:1)430默认的是关闭中断嵌套的,一定要中断嵌套的话,就必须在中断服务程序中打开总中断msp430的指令中,_DINT()和_EINT()分别指关和开总中断。2)当进入中断服务程序时,只要不在中断服务程序中再次开中断,则总中断是关闭的,此时来中断不管是比当前中断的优先级高还是低都不执行;3)若在中断服务程序A中开了总中断,则可以响应后来的中断B(不管B的优先级比A高还是低),B执行完再继续执行A。注意:进入中断服务程序B后总中断同样也会关闭,如果B中断程序执行时需响应中断C,则此时也要开总中断,若不需响应中断,则不用开中断,B执行完后跳出中断程序进入A程序时,总中断会自动打开;4)若在中断服务程序中开了总中断,后来的中断同时有多个,则会按优先级来执行,即中断优先级只有在多个中断同时到来时才起做用!中断服务不执行抢先原则。5)对于单源中断,只要响应中断,系统硬件自动清中断标志位,对于TA/TB定时器的比较/捕获中断,只要访问TAIV/TBIV,标志位倍被自动清除;对于多源中断要手动清标志位,比如P1/P2口中断,要手工清除相应的标志,如果在这种中断用EINT();开中断,而在打开中断前没有清标志,就会 有相同的中断不断嵌入,而导致堆栈溢出引起复位,所以在这类中断中必须先清标志再打开中断开关.6、中断应用程序举例(外部中断):void interrupt_initial()P1DIR&=BIT7; /P1.7为输入P1IE|=0x80; /P1.7中断允许P1IES|=0x00; /P1.7上升沿触发P1IFG=0; /P1.7中断标志清除,对于多源中断必须先清中断标志再打开中断_EINT(); /总中断允许#pragma vector=PORT1_VECTOR_interrupt void Port_1(void)P1IFG&=BIT7; /P1.7中断标志清除/*在此写中断服务子程序*/四、定时(一)、常见的定时方式:1、软件定时:通过延时程序实现。缺点:在延时期间,CPU一直被占用,浪费了CPU的利用率,而且延时时间不好计算。2、硬件延时:通过专门的定时器件实现。优点:在简单的软件控制下,产生准确的延时。(二)、硬件定时器种类:1、看门狗定时器。 2、定时器A。 3、定时器B。 4、实时时钟RTC。(三)、Timer_A的基本特点:1、输入时钟可以有多种选择。 2、产生的定时脉冲或PWM信号没有软件带来的误差。3、四种计数功能。 4、8种输出方式。 5、16位定时器。6、生成的PWM波能用软件任意改变占空比和周期,当PWM波不需要修改占空比和周期时,Timer_A能自动输出PWM,而不需要利用中断来维持PWM波的输出(四)、定时器的工作模式:1、停止模式:用于定时器的暂停,并不发生复位,所有寄存器现行类容在停止模式结束后都可用。当定时器暂停后重新计数时,计数器将从暂停前的计数方向计数。2、增计数模式:捕获/比较寄存器CCR0用作Timer_A增计数模式的周期寄存器,因为CCR0为16位寄存器,所以该模式适用于定时周期小于65536的连续计数情况。计数器TAR可以增计数到CCR0的值,当计数值与CCR0的值相等时,定时器复位,并从0开始重新计数。增计数模式:例程:void zengjishu()TACTL=TASSEL1+TACLR; /选择计数时钟为ACLK,将计数器TAR清零CCTL0=CCIE; /使能中断CCR0=200; /计数终值,方波频率为:32768/200/2TACTL|=MC_1; /选择Timer_A为增计数模式P1DIR|=BIT0; /P1.0作为输出_EINT(); /使能总中断#pragma vertor =TIMERA0_VECTOR_interrupt void Timer_A(void)P1OUT=0X01; /P1.0取反3、连续计数模式:特点:定时器从0开始记到0XFFFF后又开始从0开始计数,当记到CCR0时产生中断(可产生多个定时信号)例程:void lianxujishu()TACTL=TASSEL_1+TACLR; /选择计数时钟为ACLK,将计数器TAR清零CCTL0=CCIE; /使能中断CCR0=1000; /计数终值,方波频率为:32768/1000/2TACTL|=MC_2; /选择Timer_A为连续计数模式P1DIR|=BIT0; /P1.0作为输出_EINT(); /使能总中断#pragma vertor =TIMERA0_VECTOR_interrupt void Timer_A(void)P1OUT=0X01; /P1.0取反CCR0+=1000; 4、增/减计数模式:需要对称波形的情况可以用增/减计数模式,该模式下,定时器先计数到CCR0的值,然后反向减计数到0。注:定时器TAR的值从CCR01增计数到CCR0时,中断标志CCIFG0置位,从1减计数到0时,中断标志TAIFG置位5、捕获/比较模块:(1)、工作模式:1.1、捕获模式:当捕获/比较控制寄存器CCTLx中的CAP=1时,该模块工作于捕获模式。这时如果在选定的引脚上发生设定的脉冲沿,则TAR中的值将自动写入到捕获/比较寄存器CCRx中。用途:a、测量软件程序执行所用时间。b、测量硬件之间的时间。c、测量频率。(2)、比较模式:当捕获/比较控制寄存器CCTLx中的CAP=0时,该模块工作于比较模式。Timer_A 有三个捕获/比较器,在比较模式下有8个输出模式五、A/D(一)、msp430f449内自带A/D的主要特点:1、 12位转换精度。 2、有多种时钟源可供选择,内带时钟发生器。3、配有8个外部通道和4个内部通道。4、内置参考电源,并且参考电压Vref有6种组合。 5、采样速度快,最快200Ks/s。6、四种工作模式:a、单通道单次转换模式: CONSEQ_0。 b、单通道多次转换模式: CONSEQ_2。c、序列通道单次转换模式:CONSEQ_1 。 d、序列通道多次转换模式:CONSEQ_3。(二)、ADC12内部结构图:(三)、A/D转换的一般步骤:1、选择转换通道:P6SEL|=0x01; /使能A/D通道A0(P6.0);P6SEL|=BIT7; /使能A/D通道A7(P6.7);2、打开ADC12内核,设置采样周期,参考电压:ADC12CTL0=ADC12ON; /打开ADC12内核;ADC12CTL0=SHT0_0; /设置采样周期为4/200KHZ*1ADC12CTL0=REFON; /选择内部参考电压为2.5V;ADC12CTL0=MSC; /多次采样/转换位3、设置工作模式,转换触发方式:ADC12CTL1=SHP; /采样信号SAMPCON来自采样定时器ADC12CTL1=ADC12SSEL_0; /采样时钟来自ADC12OSC为200KHZADC12CTL1=CONSEQ_2;/单通道多次转换模式4、使能转换(即允许转换):ADC12CTL0|=ENC; /使能转换;注意:当MSC=1且SHP=1时,仅首次转换由SHI信号的上升沿触发采样定时器,之后采样转换将在前一次转换完成之后立即进行。5、开始转换:ADC12CTL0|=ADC12SC; /开始转换;(四)、几种工作模式例程:1、单通道单次转换:void ADC_convert()P6SEL|=0x01; /使能A/D通道A0(P6.0);ADC12CTL0=ADC12ON+ SHT0_0; /开ADC12内核,设置采样周期为4*200KHZ*1ADC12CTL1=SHP; /采样信号SAMPCON来自采样定时器ADC12CTL0|=ENC; /使能转换;ADC12CTL0|=ADC12SC; /开始转换;int Read_result() int result;result= ADC12MEM0;return (result);2、单通道多次转换:Void ADC_convert() P6SEL|=0x02; /使能A/D通道A1;ADC12CTL0=ADC12ON+SHT0_8+MSC; /打开ADC12内核,设置为首次触发即可,确定采样周期为4*mclk*64,选择内部参考电压为2.5v;ADC12CTL1=SHP+ADC12SSEL_2+CONSEQ_2; /设置为单通道多次转换模式并且由采样输入信号的上升沿触发采样定时器 ;ADC12CTL0|=ENC; /使能转换;ADC12CTL0|=ADC12SC; /开始转换;int Read_result() int result;result= ADC12MEM1;return (result);3、序列通道单次转换:void ADC_convert()P6SEL|=0x0f; ADC12MCTL0=SREF_0+INCH_0; ADC12MCTL1=SREF_0+INCH_1; ADC12MCTL2=SREF_0+INCH_2;ADC12MCTL3=SREF_0+INCH_3+EOS; /EOS为序列结束信号ADC12CTL0=ADC12ON+MSC+ SHT0_0; /开ADC12内核,设置采样周期为4*200KHZ*1ADC12CTL1=SHP+CONSEQ_1; /采样信号SAMPCON来自采样定时器ADC12CTL0|=ENC; /使能转换;ADC12CTL0|=ADC12SC; /开始转换;_EINT(); /开中断#pragma vector=ADC_VECTOR_interrupt void ADC12ISR(void) result0 = ADC12MEM0; result1 = ADC12MEM1;result2 = ADC12MEM2; result3 = ADC12MEM3;4、序列通道多次转换:void ADC_convert()P6SEL|=0x0f; ADC12MCTL0=SREF_0+INCH_0; ADC12MCTL1=SREF_0+INCH_1; ADC12MCTL2=SREF_0+INCH_2;ADC12MCTL3=SREF_0+INCH_3+EOS; /EOS为序列结束信号ADC12CTL0=ADC12ON+MSC+ SHT0_0; /开ADC12内核,设置采样周期为4*200KHZ*1ADC12CTL1=SHP+CONSEQ_3; /采样信号SAMPCON来自采样定时器ADC12CTL0|=ENC; /使能转换;ADC12CTL0|=ADC12SC; /开始转换;_EINT(); /开中断#pragma vector=ADC_VECTOR_interrupt void ADC12ISR(void) result0 = ADC12MEM0; result1 = ADC12MEM1;result2 = ADC12MEM2; result3 = ADC12MEM3;六、USART(一)、串口是系统与外界联系的重要手段,我们有时需要使用上位机实现系统调试及现场数据的采集和控制,msp430f449中有两个串口模块USART0、USART1分别对应P2.4、P2.5和P4.0、P4.1都可实现 UART异步通信和SPI同步通信。(二)、串行异步通信的主要特点:1、两个独立的移位寄存器:输入、输出寄存器。2、传输7位或8位数据,可采用奇校验或偶校验或无校验。3、数据在发送或接收时低位在先。4、独立的发送、接收中断。5、可编程实现分频因子为整数或小数的波特率。(三)、USART模块结构图:(四)、串口通信的一般步骤(无校验):1、选择串口模块(USART0、USART1)。USART1: P4SEL=0X03;P4DIR=0X01; /P4.0为发送TXD,P4.1为接收RXD2、在SWRST=1时,设置串口。U1CTL=SWRST; / 复位USART,并设置串口3、选择波特率发生器时钟。UTCTL1=SSEL1; /UCLK=MCLK4、使能发送、接收。ME2=UTXE1+URXE1; /使能RXD TXD5、设置字符长度。U1CTL=CHAR; /设置字符长度为8位,默认时为7位6、设置波特率。 注:UBR=U1BR0+U1BR1; 其值应大于3U1BR0=0X1B; /存放波特率分频因子的整数部分的低字节U1BR1=0X00; /存放波特率分频因子的整数部分的高字节U1MCTL=0X03; /设置波特率为384007、SWRST=0,串口设置完毕。U1CTL&=SWRST; /在SWRST为1之前设置串口8、使能中断。IE2=URXIE1; /使能接收中断七、PWM波(一)、Timer_A在增计数模式下的PWM输出:void PWM_Creat(int a,int b)TACTL=TASSEL_1+TACLR+ID_3; /选择计数时钟为ACLK,并进行8分频,将计数器TAR清零CCR0=255; /计数终值,方波频率为:32768/256/8/2=8HZCCTL1=OUTMOD_7;CCR1=a; /占空比为:a/256CCTL2=OUTMOD_7;CCR2=b; /占空比为:b/256P1DIR|=BIT2; /CCR1P1SEL|=BIT2;P2DIR|=BIT0; /CCR2P2SEL|=BIT0;TACTL|=MC_1; /选择Timer_A为增计数模式(二)、增计数模式下的输出:八、头文件(一)、两种头文件使用方式:1、#ifndef _ADC_H#define _ADC_Hextern void ADC_convert();extern int Read_result();#endif2、在工程里直接调用.C文件58脚RST/NMI 为430单片机的复位引脚(低电平有效)。1脚DVCC,63脚DVSS 为数字电源接口。64脚AVCC,62脚AVSS 为模拟电源接口。注意:MSP430系列单片机的供电电压为1.8V3.6V。说明(在MSP430小系统中数字电源地与模拟电源地必须通过0欧电阻连接起来以防止数字电路产生的高频信号对模拟电路造成影响)32脚UTXD0,33脚URXD0 的第二功能为MSP430F149单片机两路串口通讯接口中的第一路。 34脚UTXD1,35脚URXD1 的第二功能为MSP430F149单片机两路串口通讯接口中的第二路。29脚SIMO0,30脚SOMI0,31脚UCLK0 的第二功能为MSP430F149单片机两路SPI通讯接口中的第一路。45脚SIMO1,46脚SOMI1,47脚UCLK1 的第二功能为MSP430F149单片机两路SPI通讯接口中的第二路。48脚 的第二功能为MSP430F149单片机MCLK(主系统时钟)的输出端49脚 的第二功能为MSP430F149单片机 SCLK(子系统时钟)的输出端50脚 的第二功能为MSP430F149单片机 ACLK(辅系统时钟)的输出端。52脚,53脚 为外部高频时钟晶振输入端(程序中说明一般用XT2CLK或HF XTAL表示)。8脚,9脚 为外部低频时钟晶振输入端(程序中说明一般用LFXTICLK表示)。59脚TA0,60脚TA1,61脚TA2,2脚A3,3脚A4,4脚A5,5脚A6,6脚A7 的第二功能为8路的内部12位ADC模拟电压输入端口。54脚TDO/TDI,55脚TDI/TCLK,56脚TMS,57脚TCK 为JTAG接口(同时拥有仿真器和编程器的功能),用于下载程序并实现硬件在线仿真。具体引脚功能参考MSP430英文数据手册.pdf 8页I/O口的操

温馨提示

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

评论

0/150

提交评论