Transcript
Page 1: msp430f449+msp430 launchpad

msp430f449+msp430 launchpad

1 、开发环境: IAR Embedded Workbench

2 、 IAR 的安装及相应设置 3 、 IAR 的使用

Page 2: msp430f449+msp430 launchpad

msp430f449 简介1 、低工作电压: 1.8~3.6V2 、超低功耗: 活动模式: 280UA ( 1MHZ , 2.2V ) 待机模式 : 1.1UA 掉电模式 : ( RAM 数据保持) 0.1UA3 、有 5 种节电模式4 、从待机到唤醒的响应时间不超过 6us5 、 12 位 A/D 转换器 ( 8 通道、带有内部参考源、采样保持)6 、 16 位精简指令结构( RISC ), 150ns 指令周期7 、带有 3 个捕获 / 比较器结构的 16 位定时器8 、串行通信可软件选择 UART/SPI 两种模式9 、可在线串行编程,不需要外部编程电压10 、驱动液晶能力为 160 段11 、 FLASH 存储器为 60KB , RAM 为 2KB

Page 3: msp430f449+msp430 launchpad

msp430f449

1 、 IO 口 2 、时钟 3 、中断 4 、定时 5 、 AD 6 、 UART 7 、 PWM 波 8 、头文件

Page 4: msp430f449+msp430 launchpad

1 、 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 :使能)

Page 5: msp430f449+msp430 launchpad

二、常用特殊 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 。

Page 6: msp430f449+msp430 launchpad

三、基本操作: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 口外部输入值

Page 7: msp430f449+msp430 launchpad

2 、时钟一、三个时钟源: 1 、 LFXT1CLK :低频时钟( 32768HZ ) 2 、 XT2CLK :高频时钟( 8MHZ ) 3 、 DCOCLK :片内数控振荡器最高

46MHZ 但不稳定(不能作为定时用)

二、时钟模块结构图:

Page 8: msp430f449+msp430 launchpad
Page 9: msp430f449+msp430 launchpad

三、时钟模块可提供的四种时钟信号: 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 的时钟。(主要用于高

速外设)

Page 10: msp430f449+msp430 launchpad

四、 MCLK 应用举例: 1 、在默认情况下, MCLK 来自于 DCOCLK 其频率为

1.048576MHZ 其计算方法: MCLK= ( 31+1 ) *32768 2 、如何选择 ACLK 作为 MCLK : void clk_initial() { do { IFG1&=~OFIFG; // 清除振荡器的失效标志 __delay_cycles(200); } while((IFG1&OFIFG)!=0); // 如果振荡器的失效标志存在 FLL_CTL1=SELM1+SELM0; // 选择 ACLK 作为 MCLK

}

Page 11: msp430f449+msp430 launchpad

3 、如何选择 XT2CLK 作为 MCLK : void clk_initial() { do { IFG1&=~OFIFG; // 清除振荡器的失效标志 __delay_cycles(200); } while((IFG1&OFIFG)!=0); // 如果振荡器的失效标志存在 FLL_CTL1=SELM1; // 选择 XT2CLK 作为 MCLK } 4 、如何选择 DCOCLK 作为 MCLK :计算( 121+1 ) *2*32768=7.995MHZ void CLK_initial() { SCFI0|=FN_4; // 选择 DCO 频率调整范围为 2.8~26.6MHZ SCFQCTL=249; // 倍频倍数,最高位为 DCO+ 调制器的控制位 FLL_CTL0=DCOPLUS+OSCCAP_1; // 选择 DCO 作为 MCLK前分频 }

Page 12: msp430f449+msp430 launchpad

3 、中断一、中断源:1 、外部中断: P1 、 P2

2 、定时器中断。3 、看门狗定时器中断。4 、串口中断。5 、 A/D 转换中断。6 、比较器中断。

二、中断的 一般设置: 1 、打开、关闭局部中断:打开局部中断一般是给想关的特殊功能寄存器相关位置 1

以 P1 口外部中断为例 : 打开局部中断 :

P1IE|=BIT0;//打开 P1.0 外部中断

Page 13: msp430f449+msp430 launchpad

关闭局部中断一般是给想关的特殊功能寄存器相关位置 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] */

Page 14: msp430f449+msp430 launchpad

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-maska××e */

RESET_VECTOR (15 * 2u) /* 0xFFFE Reset [Highest Priority] */

Page 15: msp430f449+msp430 launchpad

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();" 开中断 , 而在打开中断前没有清标志 , 就会 有相同的中断不断嵌入 , 而导致堆栈溢出引起复位 ,所以在这类中断中必须先清标志再打开中断开关 .

Page 16: msp430f449+msp430 launchpad

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 中断标志清除/* 在此写中断服务子程序 */}

Page 17: msp430f449+msp430 launchpad

4 、定时 一、常见的定时方式: 1 、软件定时:通过延时程序实现。缺点:在延时期间, CPU 一直被占用,浪费

了 CPU 的利用率,而且延时时间不好计算。 2 、硬件延时:通过专门的定时器件实现。优点:在简单的软件控制下,产生准

确的延时。

二、硬件定时器种类: 1 、看门狗定时器。 2 、定时器 A 。 3 、定时器 B。 4 、实时时钟 RTC 。

Page 18: msp430f449+msp430 launchpad

三、 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 开始重新计数。

Page 19: msp430f449+msp430 launchpad

增计数模式 :

void zengjishu(){ TACTL=TASSEL1+TACLR; // 选择计数时钟为 ACLK ,将计数器 TAR 清零 CCTL0=CCIE; // 使能中断 CCR0=200; // 计数终值,方波频率为: 32768/200/2 TACTL|=MC_1; // 选择 Timer_A 为增计数模式 P1DIR|=BIT0; //P1.0 作为输出 _EINT(); // 使能总中断 }#pragma vertor =TIMERA0_VECTOR__interrupt void Timer_A(void) { P1OUT^=0X01; //P1.0 取反 }

例程:

Page 20: msp430f449+msp430 launchpad

3 、连续计数模式:

特点:定时器从 0 开始记到 0XFFFF 后又开始从 0 开始计数,当记到 CCR0 时产生中断(可产生多个定时信号)

Page 21: msp430f449+msp430 launchpad

例程: void lianxujishu(){ TACTL=TASSEL_1+TACLR; // 选择计数时钟为 ACLK ,将计数器 TAR 清零 CCTL0=CCIE; // 使能中断 CCR0=1000; // 计数终值,方波频率为: 32768/1000/2 TACTL|=MC_2; // 选择 Timer_A 为连续计数模式 P1DIR|=BIT0; //P1.0 作为输出 _EINT(); // 使能总中断 }#pragma vertor =TIMERA0_VECTOR__interrupt void Timer_A(void) { P1OUT^=0X01; //P1.0 取反 CCR0+=1000; }

Page 22: msp430f449+msp430 launchpad

4 、增 / 减计数模式:需要对称波形的情况可以用增 /减计数模式,该模式下,定时器先计数到 CCR0 的值,然后反向减计数到 0 。

注:定时器 TAR 的值从 CCR0—1增计数到 CCR0 时,中断标志 CCIFG0置位,从 1 减计数到 0 时,中断标志 TAIFG 置位

Page 23: msp430f449+msp430 launchpad

5 、捕获 / 比较模块:一、工作模式: 1 、捕获模式:当捕获 / 比较控制寄存器 CCTLx 中的 CAP=1 时,该模块工

作于捕 获模式。这时如果在选定的引脚上发生设定的脉冲沿,则 TAR 中的值将自动写入到捕获 / 比较寄存器 CCRx 中。

用途: 1 、测量软件程序执行所用时间。 2 、测量硬件之间的时间。 3 、测量频率。 2 、比较模式:当捕获 / 比较控制寄存器 CCTLx 中的 CAP=0 时,该模块工

作于比较模式。 Timer_A 有三个捕获 / 比较器,在比较模式下有 8 个输出模式

Page 24: msp430f449+msp430 launchpad

5 、 A/D一、 msp430f449 内自带 A/D 的主要特点:1 、 12 位转换精度。2 、有多种时钟源可供选择,内带时钟发生器。3 、配有 8 个外部通道和 4 个内部通道。4 、内置参考电源,并且参考电压 Vref 有 6 种组合。5 、采样速度快,最快 200Ks/s 。6 、四种工作模式: 1 、单通道单次转换模式: CONSEQ_0 。 2 、单通道多次转换模式: CONSEQ_2 。 3 、序列通道单次转换模式: CONSEQ_1 。 4 、序列通道多次转换模式: CONSEQ_3 。二、 ADC12 内部结构图:

Page 25: msp430f449+msp430 launchpad
Page 26: msp430f449+msp430 launchpad

三、 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*1 ADC12CTL0=REFON; // 选择内部参考电压为 2.5V; ADC12CTL0=MSC; //多次采样 / 转换位 3 、设置工作模式,转换触发方式: ADC12CTL1=SHP ; // 采样信号 SAMPCON 来自采样定时器 ADC12CTL1=ADC12SSEL_0; // 采样时钟来自 ADC12OSC 为 200KHZ ADC12CTL1=CONSEQ_2 ; //单通道多次转换模式 4 、使能转换(即允许转换): ADC12CTL0|=ENC; // 使能转换 ;

Page 27: msp430f449+msp430 launchpad

注意:当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*1 ADC12CTL1=SHP ; // 采样信号 SAMPCON 来自采样定时器 ADC12CTL0|=ENC; // 使能转换; ADC12CTL0|=ADC12SC; // 开始转换; } int Read_result()

{ int result;

result= ADC12MEM0; return (result);

}

Page 28: msp430f449+msp430 launchpad

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); }

Page 29: msp430f449+msp430 launchpad

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*1 ADC12CTL1=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;}

Page 30: msp430f449+msp430 launchpad

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*1 ADC12CTL1=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;}

Page 31: msp430f449+msp430 launchpad

6 、 USART一、串口是系统与外界联系的重要手段,我们有时需要使用上位机实现系统调试

及现场数据的采集和控制, msp430f449 中有两个串口模块USART0 、 USART1

分别对应 P2.4 、 P2.5 和 P4.0 、 P4.1 都可实现 UART异步通信和 SPI同步通信。

二、串行异步通信的主要特点: 1 、两个独立的移位寄存器:输入、输出寄存器。 2 、传输 7 位或 8 位数据,可采用奇校验或偶校验或无校验。 3 、数据在发送或接收时低位在先。 4 、独立的发送、接收中断。 5 、可编程实现分频因子为整数或小数的波特率。

三、 USART 模块结构图:

Page 32: msp430f449+msp430 launchpad
Page 33: msp430f449+msp430 launchpad

四、串口通信的一般步骤(无校验): 1 、选择串口模块( USART0 、 USART1 )。 USART1: P4SEL=0X03; P4DIR=0X01; //P4.0 为发送 TXD , P4.1 为接收 RXD 2 、在 SWRST=1 时,设置串口。 U1CTL=SWRST; // 复位 USART,并设置串口 3 、选择波特率发生器时钟。 UTCTL1=SSEL1; //UCLK=MCLK 4 、使能发送、接收。 ME2=UTXE1+URXE1; // 使能 RXD TXD 5 、设置字符长度。 U1CTL=CHAR; // 设置字符长度为 8 位 ,默认时为 7 位 6 、设置波特率。 注: UBR=U1BR0+U1BR1; 其值应大于 3 U1BR0=0X1B; // 存放波特率分频因子的整数部分的低字节 U1BR1=0X00; // 存放波特率分频因子的整数部分的高字节 U1MCTL=0X03; // 设置波特率为 38400 7 、 SWRST=0 ,串口设置完毕。 U1CTL&=~SWRST; // 在 SWRST 为 1 之前设置串口 8 、使能中断。 IE2=URXIE1; // 使能接收 中断

Page 34: msp430f449+msp430 launchpad

7 、 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=8HZ CCTL1=OUTMOD_7; CCR1=a; //占空比为: a/256 CCTL2=OUTMOD_7; CCR2=b; //占空比为: b/256 P1DIR|=BIT2; //CCR1 P1SEL|=BIT2; P2DIR|=BIT0; //CCR2 P2SEL|=BIT0; TACTL|=MC_1; // 选择 Timer_A 为增计数模式 }

Page 35: msp430f449+msp430 launchpad

二、增计数模式下的输出:

Page 36: msp430f449+msp430 launchpad

8 、头文件一、两种头文件使用方式: 1 、 #ifndef _ADC_H #define _ADC_H extern void ADC_convert(); extern int Read_result(); #endif 2 、在工程里直接调用 .C 文件

Page 37: msp430f449+msp430 launchpad

msp430launchpadMsp430g2553 简介:1 、低工作电压: 1.8~3.6V2 、超低功耗: 活动模式: 280UA ( 1MHZ , 2.2V ) 待机模式 : 0.5UA 掉电模式 : ( RAM 数据保持) 0.1UA3 、有 5 种节电模式4 、从待机到唤醒的响应时间不超过 1us5 、 10 位 A/D 转换器 (带有内部参考源、采样保持,最大采样率 200Ks/s )6 、 16 位精简指令结构( RISC ), 6.25ns 指令周期7 、带有 3 个捕获 / 比较器结构的 16 位定时器8 、串行通信可软件选择 UART/SPI/I2C 三种模式9 、可在线串行编程,不需要外部编程电压11 、 FLASH 存储器为 16KB , RAM 为 512B

Page 38: msp430f449+msp430 launchpad

Msp430g2553 结构图

Page 39: msp430f449+msp430 launchpad

Msp430g2553 1 、 IO 口 2 、时钟 3 、中断 4 、定时 5 、 AD 6 、 PWM 波

Page 40: msp430f449+msp430 launchpad

1 、 IO一、 P 口的基本特点:1 、有 P1 、 P2 两个可独立编程的 IO 口。2 、每个 P 口都有输入、输出、中断功能。3 、对 P 口控制寄存器的读写支持所有指令集。4 、每一个 P 口都有独立可编程的上拉、下拉电阻。

二、 P 口的 基本操作: 大致同msp430f449 相同,注意:在将 P2.6 、 P2.7 作为普通 IO 口时,

需要进行以下设置: P2SEL&=~(BIT6+BIT7);

Page 41: msp430f449+msp430 launchpad

三、 IO 口的复用:

Page 42: msp430f449+msp430 launchpad

2 、时钟一、时钟源: 1 、 ACLK :系统辅助时钟,来自 LFXT1CLK 为 32768HZ 。 2 、 MCLK :系统主时钟,有以下 5 种选择: 1 、 32768HZ ,来自 ACLK 。 2 、 1MHZ: BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; 3 、 8MHZ: BCSCTL1 = CALBC1_8MHZ; DCOCTL = CALDCO_8MHZ; 4 、 12MHZ: BCSCTL1 = CALBC1_12MHZ; DCOCTL = CALDCO_12MHZ; 5 、 16MHZ: BCSCTL1 = CALBC1_16MHZ; DCOCTL = CALDCO_16MHZ; 3 、 SMCLK :子系统时钟,一般为 16MHZ 。

Page 43: msp430f449+msp430 launchpad

MCLKCPU

SMCLKPeripherals

ACLKPeripherals

16MHzDCO

Min. Puls Filter

VLO

OSC_Fault

二、时钟结构图:

Page 44: msp430f449+msp430 launchpad

3 、中断一、其中断基本同msp430f449 一样。二、例程: void interrupt_initial(){ P1DIR&=~BIT7; //P1.7 为输入 P1SEL|=BIT7; P1IE|=BIT7; //P1.7 中断允许 P1IES|=0x80; //P1.7 下降沿触发 P1IFG=0; //P1.7 中断标志清除 ,对于多源中断必须先清中断标志再打开中断 P1DIR|=BIT6; P1OUT&=~BIT6; _EINT(); //总中断允许}#pragma vector=PORT1_VECTOR__interrupt void Port_1(void){ P1IFG&=~BIT7; //P1.7 中断标志清除 P1OUT|=BIT6; //点亮绿灯}

Page 45: msp430f449+msp430 launchpad

4 、定时一、其定时基本同msp430f449 一样。二、例程:void zengjishu(){ TACTL=TASSEL_2+TACLR+ID_3; // 选择计数时钟为 MCLK ,并进行 8 分频,将计

数器 TAR 清零 CCTL0=CCIE; // 使能中断 CCR0=65535; // 计数终值,方波频率为: 1048576/65536/8/2=1HZ TACTL|=MC_1; // 选择 Timer_A 为增计数模式 P1DIR|=BIT0; //P1.0 作为输出 _EINT(); // 使能总中断 }#pragma vector =TIMER0_A0_VECTOR__interrupt void Timer_A(void) { P1OUT^=BIT0; //P1.0 取反 }

Page 46: msp430f449+msp430 launchpad

5 、 A/D一、主要特点:1 、 10 位转换精度。2 、有多种时钟源可供选择,内带时钟发生器。3 、配有 6 个外部通道和 2 个内部通道。4 、内置参考电源,并且参考电压 Vref 有 8 种组合。5 、采样速度快,最快 200Ks/s 。6 、四种工作模式: 1 、单通道单次转换模式: CONSEQ_0 。 2 、单通道多次转换模式: CONSEQ_2 。 3 、序列通道单次转换模式: CONSEQ_1 。 4 、序列通道多次转换模式: CONSEQ_3 。

Page 47: msp430f449+msp430 launchpad

RAM, Flash, Peripherals

S/H 10-bit SAR

ADC10SCTA1

TA2TA0

Direct Transfer

Controller

VR- VR+

AVCCAVSS

1.5V or 2.5V

Auto

Batt Temp

DirectTransfer

Controller

DataTransfer

Controller

二、 A/D 结构图:

Page 48: msp430f449+msp430 launchpad

三、例程:void ADC_convert(){ P1SEL&=0x20; // 使能 A/D 通道 A5; ADC10CTL0 = ADC10SHT_1+ ADC10ON+SREF_1+REF2_5V+REFON+MSC; // 打开 ADC10 内核,确定采样周期为 8*ADC10OSC/2, 选择内部参考电压为 2.5v ;

ADC10CTL1 = INCH_5+ADC10DIV_1+CONSEQ_2; // input A5 模拟信号输入选择通道 A5 即 P1.5, 设置为单通道多次转换模式 ,分频因子为 2

ADC10AE0 |= BIT5; // 使 P1.5允许 AD 模拟输入信号 ADC10CTL0|=ENC; // 使能转换; ADC10CTL0|=ADC10SC; // 开始转换; } int Read_result() { int result; result= ADC10MEM; return (result); }

Page 49: msp430f449+msp430 launchpad

6 、 PWM 波一、例程:void PWM_Creat(int a,int b){ TACTL=TASSEL_2+TACLR+ID_3; // 选择计数时钟为 MCLK ,并进行 8 分频,将计数器 TAR 清零

CCR0=65535; // 计数终值,方波频率为: 1048576/65536/8/2=1HZ CCTL1=OUTMOD_7; CCR1=a; //占空比为: a/65536 CCTL2=OUTMOD_7; CCR2=b; //占空比为: b/65536 P1DIR|=BIT2; //CCR1 P1SEL|=BIT2; P1DIR|=BIT7; //CCR2 P1SEL|=BIT7; TACTL|=MC_1; // 选择 Timer_A 为增计数模式 }


Top Related