当前位置:文档之家› MSP430简介(超详细·)

MSP430简介(超详细·)

MSP430简介(超详细·)
MSP430简介(超详细·)

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)

*32768

2、如何选择ACLK作为MCLK:

void clk_initial()

{

do

{

IFG1&=~OFIFG; //清除振荡器的失效标志

__ delay_cycles(200);

}

while((IFG1&OFIFG)!=0); //如果振荡器的失效标志存在

FLL_CTL1=SELM1+SELM0; //选择ACLK作为MCLK

}

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前分频

}

三、中断

(一)、中断源:

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

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/2

TACTL|=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/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;

}

4、增/减计数模式:需要对称波形的情况可以用增/减计数模式,该模式下,定时器先

计数到CCR0的值,然后反向减计数到0。

注:定时器TAR的值从CCR0—1增计数到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*1

ADC12CTL0=REFON; //选择内部参考电压为2.5V;

ADC12CTL0=MSC; //多次采样/转换位

3、设置工作模式,转换触发方式:

ADC12CTL1=SHP; //采样信号SAMPCON来自采样定时器

ADC12CTL1=ADC12SSEL_0; //采样时钟来自ADC12OSC为200KHZ

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

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;

六、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为接收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; //使能接收中断

七、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为增计数模式

}

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

八、头文件

(一)、两种头文件使用方式:

1、#ifndef _ADC_H

#define _ADC_H

extern void ADC_convert();

extern int Read_result();

#endif

2、在工程里直接调用.C文件

58脚RST/NMI 为430单片机的复位引脚(低电平有效)。

1脚DVCC,63脚DVSS为数字电源接口。

64脚AVCC,62脚AVSS 为模拟电源接口。

注意:MSP430系列单片机的供电电压为1.8V~3.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脚TC K 为JTAG接口(同时拥有仿真器和编程器的功能),用于下载程序并实现硬件在线仿真。

具体引脚功能参考《MSP430英文数据手册.pdf 》 8页

I/O口的操作

P1~P6的公有寄存器位为P X SEL,P X DIR,P X OUT,P X IN。

其中P1,P2相对于P3,P4 ,P5,P6还多出了3个寄存器P X IE,P X IES,P X IFG,这三个寄存器是用于设置开启P1,P2的外部触发中断使用的(其中X可以为1,2,3,4,5,6)。

查看以上I/O口寄存器请参考MSP430x1xx 系列用户使用手册.pdf的191页。

以上各寄存器功能介绍(以P3.4为例):

①P3SEL用于功能选择,当其置0选择的是普通I/O口功能,置1选择的是第二功能;

比如32脚UTXD0对应P3.4,33脚URXD0对应P3.4

P3SEL &= ~BIT4;// 该程序是将P3.4置0,此时该引脚只具有普通I/O口功能

P3SEL |= BIT4;// 该程序是将P3.4置1,此时该引脚将具有异步串口通信功能

②P3DIR是用于设置I/O口输出方向的

P3DIR &= ~BIT4; //该程序是将I/O口的方向设置为输入(一般用于读取数据时)

P3DIR |= BIT4; //该程序是将I/O口的方向设置为输出

③P3OUT是用于设置I/O口输出高低电平的

P3OUT &= ~BIT4; ///该程序是使该I/O口输出高电平

P3OUT |= BIT4; ///该程序是使该I/O口输出低电平

④P3IN是用于读取外部输入到该引脚

使用该寄存器前必须将P3DIR置0

比如设置一个变量unsigned char A用于存储从P3IN的第4位读取的值,程序如下

P3DIR &= ~BIT4;

A=P3IN;

入门小程序(LED灯闪烁):

#include //引入所需头文件

int i=0,j=0; //申明需使用的全局变量并初始化用于延时

void Delay(); //申明子程序

void main() //构建主程序

{

WDTCTL=WDTPW+WDTHOLD;//关闭看门狗(调试时必须关闭看门狗)

P3SEL &= ~BI4; //选择P3.4作为普通I/O口功能

P3DIR |= BIT4; //将P3.4设置为输出方向

P3OUT |= BIT3; //使P3.4输出高电平(实验板上初始化灯的状态为熄//灭)

while(1) {

P3OUT ^= BIT4; //灯的状态取反

Delay(); //调用延时子程序

}

}

/*******以下是一个不精确的延时子程序********/

void Delay(){

for(i=0;i<1000;i++)

for(j=0;j<110;j++);

}

将该程序烧入MSP430测试,看现象。

开发板给出的源码程序通常使用以下程序作为延时程序

i=50000; do(i--); while(i!=0);

或i=50000; do

{

i--;

}

while(i!=0);

如果一个程序只是用于流水灯,交通灯,那么延时或许不重要,但如果你需要操作外设比如液晶LCD或其他对时序要求比较严格的器件时,精确延时就显得尤其重要了。

MSP430单片机实验报告v3.0

MSP430单片机课程设计 一.设计要求 数字温度计 (1)用数码管(或LCD)显示温度和提示信息; (2)通过内部温度传感器芯片测量环境温度; (3)有手动测量(按测量键单次测量)和自动测量(实时测量)两种工作模式; (4)通过按键设置工作模式和自动测量的采样时间(1秒~1小时); (5)具备温度报警功能,温度过高或过低报警。 二.系统组成 系统由G2Launch Pad及其拓展板构成,单片机为MSP430G2553。 I2的通信方式对IO进行拓展,芯片为TCA6416A; 使用C 使用HT1621控制LCD; 三.系统流程 拓展的四个按键key1、key2、key3、key4分别对应单次测量、定时测量、定时时间的增、减。定时时间分别为1s,5s,15s,30s,60s。在自动测量模式下,当温度超过设定温度上限

即报警,报警时在LCD屏幕显示ERROR同时LED2闪烁,在5s后显示0℃。此时可重新开始手动或自动测量温度。 系统示意图: 四.演示 a)手动测量温度 b)自动测量温度 c)报警

显示ERROR同时LED闪烁d)设置时间界面 五.代码部分 #include "MSP430G2553.h" #include "TCA6416A.h" #include "LCD_128.h" #include "HT1621.h" #include "DAC8411.h" #define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) static int t=0; long temp; long IntDeg; void ADC10_ISR(void); void ADC10_init(void); void LCD_Init(); void LCD_Display(); void GPIO_init(); void I2C_IODect(); void Error_Display(); void WDT_Ontime(void); void LCD_Init_AUTO(); void LCD1S_Display();

MSP430单片机题目答案整理(大部分)

第一章 1. MCU(微控制器单元)与MPU(微处理器单元)的区别 MCU集成了片上外围器件,而MPU不带外围器件,是高度集成的通用结构的处理器。是去除了集成外设的MCU。 2. MSC430单片机的不同系列的差别 MSP430系列单片机具有超低功耗、处理能力强大、片内外设丰富、系统工作稳定、开发环境便捷等显着优势,和其他类型单片机相比具有更好的使用效果、更广泛的应用前景。 3. MSC430单片机主要特点 1.超低功耗 2. 强大的处理能力 3. 高性能模拟技术及丰富的片上外围模块 4. 系统工作稳定 5. 方便高效的开发环境 4. MSC430单片机选型依据 选择最容易实现设计目标且性能价格比高的机型。 在研制任务重,时间紧的情况下,首先选择熟悉的机型。 欲选的机型在市场上要有稳定充足的货源。 第二章 1. 从计算机存储器体系结构上看,MSP430单片机属于什么结构 冯·诺依曼结构,是一种程序存储器和数据存储器合并在一起的存储器体系结构。 2. RISC与CISC体系结构的主要特征是什么MSP430单片机属于哪种结构 CISC----是复杂指令系统计算机Complex Instruction Set Computer的缩写,MCS-51单片机属于CISC。具有8位数据总线、7种寻址模式,111条指令。 RISC----是精简指令系统计算机Reduced Instruction Set Computer的缩写,MSP430单片机属于RISC。具有16位数据总线、7种寻址模式,27条指令。 3. 对MSP430单片机的内存访问时,可以有哪几种方式读写字数据有什么具体要求 字,字节,常字。字访问地址必须是偶数地址单元。 4. MSP430单片机的中断向量表位于什么位置其中存放的是什么内容 中断向量表:存放中断向量的存储空间。430单片机中断向量表地址空间:32字节,映射到存储器空间的最高端区域 5. MSP430单片机的指令系统物理指令和仿真指令各有多少条。 27种物理指令-内核指令和24种仿真指令 6. MSP430单片机的指令系统有哪些寻址方式各举一例说明。 有7种寻址方式:寄存器寻址,变址寻址,符号寻址,绝对寻址, 间接寻址,间接增量寻址,立即数寻址 7. MSP430单片机的CPU中有多少个寄存器其中专用寄存器有哪几个 4个专用寄存器(R0、R1、R2、R3)和12个通用寄存器(R4~R15) R0:程序计数器(PC) R1:堆栈指针(SP)—总是指向当前栈顶 R2:状态寄存器(SR)只用到16位中的低9位 R2/R3:常数发生器(CG1/CG2) 8. 按要求写出指令或指令序列。 9. 写出给定指令或指令序列的执行结果。 10.汇编语言程序的分析与理解。

单片机实验报告

院系:计算机科学学院专业:智能科学与技术年级: 2012 学号:2012213865 姓名:冉靖 指导教师:王文涛 2014年 6月1日

一. 以下是端口的各个寄存器的使用方式: 1.方向寄存器:PxDIR:Bit=1,输出模式;Bit=0,输入模式。 2.输入寄存器:PxIN,Bit=1,输入高电平;Bit=0,输入低电平。 3.输出寄存器:PxOUT,Bit=1,输出高电平;Bit=0,输出低电平。 4.上下拉电阻使能寄存器:PxREN,Bit=1,使能;Bit=0,禁用。 5.功能选择寄存器:PxSEL,Bit=0,选择为I/O端口;Bit=1,选择为外设功能。6.驱动强度寄存器:PxDS,Bit=0,低驱动强度;Bit=1,高驱动强度。 7.中断使能寄存器:PxIE,Bit=1,允许中断;Bit=0,禁止中断。 8.中断触发沿寄存器:PxIES,Bit=1,下降沿置位,Bit=0:上升沿置位。 9.中断标志寄存器:PxIFG,Bit=0:没有中断请求;Bit=1:有中断请求。 二.实验相关电路图: 1 MSP430F6638 P4 口功能框图: 主板上右下角S1~S5按键与MSP430F6638 P4.0~P4.4口连接: 2按键模块原理图: 我们需要设置两个相关的寄存器:P4OUT和P4DIR。其中P4DIR为方向寄存器,P4OUT 为数据输出寄存器。 主板上右下角LED1~LED5指示灯与MSP430F6638 P4.5~P4.7、P5.7、P8.0连接:

3 LED指示灯模块原理图: P4IN和P4OUT分别是输入数据和输出数据寄存器,PDIR为方向寄存器,P4REN 为使能寄存器: #define P4IN (PBIN_H) /* Port 4 Input */ #define P4OUT (PBOUT_H) /* Port 4 Output */ #define P4DIR(PBDIR_H) /* Port 4 Direction */ #define P4REN (PBREN_H) /* Port 4 Resistor Enable */ 三实验分析 1 编程思路: 关闭看门狗定时器后,对P4.0 的输出方式、输出模式和使能方式初始化,然后进行查询判断,最后对P4.0 的电平高低分别作处理来控制LED 灯。 程序流程图: 2 关键代码分析: #include void main(void) { WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗 P4DIR |= BIT5; // 设置4.5口为输出模式 P4OUT |= BIT0; // 选中P4.0为输出方式 P4REN |= BIT0; // P4.0使能 while (1) // Test P1.4 { if (P4IN & BIT0) //如果P4.0为1则执行,这是查询方式按下去后是低,否则为高

MSP430单片机选型指南

MSP430单片机选型指南 概述: 1xx:8MIPS,1-60KB 2xx:16MIPS,1-120KB,500nA Stand By(待机电流为1xx的1/2) 4xx:8/16MIPS,4-120KB,LCD Driver 5xx:25MIPS,32-256KB,USB,RF,500nA Stand By(未上市) 命名规则: 1.x1为不带“1”的型号的外设精简版,一般去掉ADC12 2.1x为不带“1”的型号的存储器增强版,加入更多的Flash或是RAM,增加Flash的型号 采用了MSP430X构架。 3.型号中带“F”表示该型号的程序存储器为Flash,不采用Flash的信号有:C11x1,C13x1, C41x,CG461x(新型号,MSP430CG4619(120k)与MSP430FG4619的差价约为$2) 4.型号中带“E”表示该型号为电测做了优化,一般有LCD驱动器,3路独立AD,硬件乘法 器,嵌入式信号处理器(ESP430) 5.型号中带“W”表示该型号为流体测量做了优化 6.型号中带“G”表示该型号为医疗仪器做了优化,一般有LCD,ADC,DAC,OPAMP 13x(1),14x(1),15x,16x系列 基本配置:48个I/O,TA,TB,Watchdog,UART/SPI,I2C,DMA,MPY,Comp_A,ADC12 相同 1.全系列Flash程序存储器 2.64引脚PM, PAG, RTD封装 3.48个I/O 4.TA(TA3),TB(13x,15x为TB3;14x,16x为TB7) 5.Comp_A 不同 1.15x,16x:支持BOR,SVS,I2C,DMA,DAC 2.14x,16x:MPY(硬件乘法器),2个UART/SPI 3.13x1,14x1不含ADC12;其它器件含8通道ADC12 4.MSP430F161x最大支持10k的RAM 说明:不特别指明的话13x包含13x1,14x包含14x1,16x包含161x 41x,42x系列

南理工 王宏波 MSP430F6638单片机实验报告

MSP430单片机应用技术 实验报告 学号:XXXXXXXX

实验1 一、实验题目:UCS实验 二、实验目的 设置DCO FLL reference =ACLK=LFXT1 = 32768Hz, MCLK = SMCLK = 8MHz,输出ACLK、SMCLK,用示波器观察并拍照。 UCS,MCLK、 SMCLK 8MHz 的 1 2 六、实验结果 实验2 一、实验题目:FLL+应用实验 二、实验目的

检测P1.4 输入,遇上升沿进端口中断,在中断服务程序内翻转P4.1 状态。 三、实验仪器和设备 计算机、开发板、示波器、信号源、电源、Code Comeposer Studio v5 四、实验步骤 1、用电缆连接开发板USB2口和电脑USB口,打开电源开关SW1,电源指示灯D5点亮; 2、运行CCSV5; WDT 1、用电缆连接开发板USB2口和电脑USB口,打开电源开关SW1,电源指示灯D5点亮; 2、运行CCSV5; 3、新建工作空间workspace; 4、新建工程project与源文件main.C; 5、编写程序; 6、编译、调试、下载程序到单片机;

7、观察、分析、保存运行结果。 五、实验程序 实验4 一、实验题目:WDT_A实验 二、实验目的 定时模式 1 2 六、实验结果 实验5一、实验题目:Timer_A实验

二、实验目的 比较模式-Timer_A0,两路PWM 输出,增减计数模式,时钟源SMCLK,输出模式7 TACLK = SMCLK = default DCOCLKDIV。PWM周期CCR0 = 512-1,P1.6 输出PWM占空比CCR1 = 37.5%,P1.7输出PWM占空比CCR1 =12.5%。 要求: (1)用示波器观察两路PWM 输出的波形并拍照,测量周期、正脉宽等参数,与理论值进行对比分析。 (2 (3 1 2 实验6 一、实验题目:ADC12实验 二、实验目的 ADC12 单次采样A0 端口,根据转换结果控制LED 状态。

如何学习MSP430单片机

如何学习MSP430单片机 如何学习MSP430单片机 学习就是迎接挑战、解决困难的过程,没有挑战,就没有人生的乐趣。 下面以MSP430系列单片机为例,解释一下学习单片机的过程。 (1)获取资料 购买有关书籍,并到杭州利尔达公司网站和TI网站获取资料,例如,在网上可以找到FET使用指导、MSP430 F1xx系列、F4xx系列的使用说明和具体单片机芯片的数据说明,可以找到仿真器FET的电路图、实验板电路图、芯片封装知识等大量的实际应用参考电路,当然有些资料是英文的,看懂英文资料是个挑战,学会4、6级英语就是为看资料的。英语难学,但是看资料容易,只要下决心,看完一本资料,就可以看懂所有的相关资料。 (2)购买仿真器FET和实验电路板 如果经济条件不错,可以直接购买。 (3)自制仿真器FET和实验电路板 自制仿真器FET,首先要到网上找到FET电路图,然后就可以使用画电路板软件画电路图和电路板图,这又是个挑战。FET电路非常简单,但要把它制作出来还是需要下一番工夫的,找一本有关书,然后练习画原理图,画完原理图后,就学习认识元件封装,再购买元件,这时就可以画电路板图了,一旦画好,将形成的PCB文件交给电路板制作公司,10天后,就可以得到电路板,焊上元件和电缆,等实验电路板做好后,就可以与实验电路板一起调试了。 自制实验电路板,需要单片机芯片内部工作原理的知识、封装知识,清楚的知道每一个引脚的功能,还需要数码管、按钮、排电阻、三端稳压器、二极管、散热器、电解电容、普通电容、电阻、钮子开关等元件的知识,对于初学者,可以做一个只有3个数码管、8个按钮、8个发光二极管的简单实验板,这样的实验板,虽然简单,但足可以帮助初学者入门单片机。自制实验电路板与自制FET 一样,首先画电路图,然后买元件,再画电路板。由于MSP430系列芯片是扁平封装,焊接起来有一定难度,这好象是个挑战,但实际上很简单,方法如下:

430单片机点亮LED实验报告

430单片机点亮LED实验报告 一.安装实验软件IAR 二.编写点亮LED灯程序 1.使P1.0口LED灯会不停的闪烁着,程序 #include typedef unsigned int uint; typedef unsigned char uchar; /*延时函数*/ void Delay_Ms(uint x) { uint i; while(x--)for(i=0;i<250;i++); } /*主函数*/ int main( void ) { WDTCTL = WDTPW + WDTHOLD;// Stop watchdog timer to prevent time out reset P2DIR|=BIT0;//定义P1口为输出 while(1)//死循环 { P2OUT^=BIT0;//P1.0口输出取反

Delay_Ms(600);//稍作延时 } } 下载进去看到了P1.0口LED灯会不停的闪烁着。 2.实验目的让两盏灯交换闪烁程序 #include"msp430g2553.h" void main(void) { void Blink_LED(); WDTCTL=WDTPW+WDTHOLD; //关闭看门狗 P1DIR=BIT6; P2DIR=BIT0; while(1) { Blink_LED(); } } void Blink_LED() { _delay_cycles(1000000); //控制第二个LED P1OUT^=BIT6; _delay_cycles(1000000); //控制第一个LED P2OUT^=BIT0;

MSP430单片机实验报告

MSP430单片机实验报告 专业: 姓名: 学号:

MSP430单片机实验报告 设计目标:使8位数码管显示“5201314.”,深入了解串行数据接口。 实现过程:主要分为主函数、驱动8位数码管函数、驱动1位数码管函数及延时函数。 延时函数:采用for循环。 驱动1位数码管子函数:设置74HC164的时钟传输和数传输,声明变量,使数据表中每一个要表示的字符的每一位都与shift做与运算从而进行传输,上升沿将传输数据传送出去。驱动1位数码管子函数的流程图如图1所示。 图1 驱动1位数码管子函数流程图 驱动8位数码管子函数:调用8次驱动1位数码管子函数。驱动8位数码管子函数流程图如图2所示。 图2 驱动8位数码管流程图

while 图3 主函数流程图 实验结果:供电后,数码管显示“5201314.”字样。 源程序: /************* 程序名称:5201314.*************/ /***程序功能:通过模拟同步串口控制8个共阳数码管***/ /*******P5.1 数据管脚,P5.3 同步时钟管脚*******/ #include // 头文件 void delay(void); // 声明延迟函数void seg7_1 (unsigned char seg7_data); // 声明驱动1 位数码管函数void seg7_8 ( unsigned char seg7_data7, unsigned char seg7_data6, unsigned char seg7_data5, unsigned char seg7_data4, unsigned char seg7_data3, unsigned char seg7_data2,

MSP430 按键程序范例(附原理图)

#i nclude void Init_Port(void) { //将P1口所有的管脚在初始化的时候设置为输入方式 P1DIR = 0; //将P1口所有的管脚设置为一般I/O口 P1SEL = 0; // 将P1.4 P1.5 P1.6 P1.7设置为输出方向 P1DIR |= BIT4; P1DIR |= BIT5; P1DIR |= BIT6; P1DIR |= BIT7; //先输出低电平 P1OUT = 0x00; // 将中断寄存器清零 P1IE = 0; P1IES = 0; P1IFG = 0; //打开管脚的中断功能 //对应的管脚由高到低电平跳变使相应的标志置位 P1IE |= BIT0; P1IES |= BIT0; P1IE |= BIT1; P1IES |= BIT1; P1IE |= BIT2; P1IES |= BIT2; P1IE |= BIT3; P1IES |= BIT3; _EINT();//打开中断 return; } void Delay(void) { int i; for(i = 100;i--;i > 0) ;//延时一点时间 } int KeyProcess(void) { int nP10,nP11,nP12,nP13; int nRes = 0;

//P1.4输出低电平 P1OUT &= ~(BIT4); nP10 = P1IN & BIT0; if (nP10 == 0) nRes = 13; nP11 = P1IN & BIT1; if (nP11 == 0) nRes = 14; nP12 = P1IN & BIT2; if (nP12 == 0) nRes = 15; nP13 = P1IN & BIT3; if (nP13 == 0) nRes = 16; //P1.5输出低电平 P1OUT &= ~(BIT4); nP10 = P1IN & BIT0; if (nP10 == 0) nRes = 9; nP11 = P1IN & BIT1; if (nP11 == 0) nRes = 10; nP12 = P1IN & BIT2; if (nP12 == 0) nRes = 11; nP13 = P1IN & BIT3; if (nP13 == 0) nRes = 12; //P1.6输出低电平 P1OUT &= ~(BIT4); nP10 = P1IN & BIT0; if (nP10 == 0) nRes = 5; nP11 = P1IN & BIT1; if (nP11 == 0) nRes = 6; nP12 = P1IN & BIT2; if (nP12 == 0) nRes = 7; nP13 = P1IN & BIT3; if (nP13 == 0) nRes = 8; //P1.7输出低电平 P1OUT &= ~(BIT4); nP10 = P1IN & BIT0; if (nP10 == 0) nRes = 1; nP11 = P1IN & BIT1; if (nP11 == 0) nRes = 2; nP12 = P1IN & BIT2; if (nP12 == 0) nRes = 3; nP13 = P1IN & BIT3; if (nP13 == 0) nRes = 4; P1OUT = 0x00;//恢复以前值。

MSP430初学者教程(最详细)

如何学习 学习就是迎接挑战、解决困难的过程,没有挑战,就没有人生的乐趣。 下面以系列为例,解释一下学习的过程。 (1)获取资料 购买有关书籍,并到杭州利尔达公司网站和TI网站获取资料,例如,在网上可以找到FET 使用指导、F1xx系列、F4xx系列的使用说明和具体芯片的数据说明,可以找到FET的、实验板、知识等大量的实际应用参考电路,当然有些资料是英文的,看懂英文资料是个挑战,学会4、6级英语就是为看资料的。英语难学,但是看资料容易,只要下决心,看完一本资料,就可以看懂所有的相关资料。 (2)购买FET和实验电路板 如果经济条件不错,可以直接购买。 (3)自制FET和实验电路板 自制仿真器FET,首先要到网上找到FET,然后就可以使用画电路板软件画电路图和电路板图,这又是个挑战。FET电常简单,但要把它制作出来还是需要下一番工夫的,找一本有关书,然后练习画,画完后,就学习认识,再购买元件,这时就可以画电路板图了,一旦画好,将形成的PCB文件交给公司,10天后,就可以得到电路板,焊上元件和电缆,等实验电路板做好后,就可以与实验电路板一起调试了。 自制实验电路板,需要单片机芯片内部工作原理的知识、封装知识,清楚的知道每一个的功能,还需要、按钮、、三端、、散热器、、普通电容、电阻、等元件的知识,对于初学者,可以做一个只有3个、8个按钮、8个的简单实验板,这样的实验板,虽然简单,但足可以帮助初学者入门单片机。自制实验电路板与自制FET一样,首先画电路图,然后买元件,再画电路板。由于系列芯片是扁平封装,焊接起来有一定难度,这好象是个挑战,但实际上很简单,方法如下:首先在焊盘上涂上,在未干的情况下,将芯片放在焊盘上,注意芯片第一的位置,并使与焊盘对齐,将擦干净的(不能有任何)接触引脚,引脚只要一热,焊盘上的就自动将引脚焊住了,千万注意上不能有,焊接时最好配备一个。焊接电路板时,每一个元件都要核对参数,可以用万用表测量的元件一定要测量。 (4)从网上获得IA 到利尔达公司或的网站下载IA,并安装到计算机上。 (5)调试FET和实验板

MSP430单片机定时器实验报告

实验四定时器实验 实验目的: MPS430F5529片内集成的定时器A的使用,学习计数器的补捕获比较模块的使用。实验内容: 定时器采用辅助时钟ACLK作为计数脉冲,fACLK=32768Hz,实现以下功能: 1.定时器TA0延时1s,点亮或熄灭LED6,即灯亮1s灭1s,如此循环,采用中断服务程序实现。 2.定时器TA0延时1s,点亮或熄灭LED4,采用捕获比较器CCR0的比较模式,设定输出方式,输出方波,不用中断服务程序 3.采用捕获比较器CCR1的比较模式LED5,设定输出方式,输出PWM波形,使LED 亮2s,灭1s。 4.用定时器实现30s倒计时,在液晶模块上显示,每过一秒显示数字变化一次。 5.使用TA1的捕获比较器CCR0捕获按键的间隔时间,在液晶模块上显示。 程序代码: 程序1: #include void main() {WDTCTL = WDTPW + WDTHOLD; //关看门狗 P1DIR |= BIT3; //设置P1.0口方向为输出。 TA0CCTL0 = CCIE; //设置捕获/比较控制寄存器中CCIE位为1, //CCR0捕获/比较功能中断为允许。 TA0CCR0 = 32767; //捕获/比较控制寄存器CCR0初值为32767 TA0CTL = TASSEL_1 + MC_1+TACLR; //设置定时器A控制寄存器TACTL, //使时钟源选择为SMCLK辅助时钟。 //进入低功耗模式LPM0和开总中断 _BIS_SR(LPM0_bits +GIE); } //定时器A 中断服务程序区 #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A (void) {

MSP430单片机深入学习笔记

复位 1.POR信号只在两种情况下产生: 微处理器上电。 RST/NMI管脚被设置为复位功能,在此管脚上产生低电平时系统复位。 2.PUC信号产生的条件为: POR信号产生。 看门狗有效时,看门狗定时器溢出。 写看门狗定时器安全健值出现错误。 写FLASH存储器安全键值出现错误。 3.POR信号的出现会导致系统复位,并产生PUC信号。而PUC信号不会引起POR信号的产生。系统复位后(POR之后)的状态为: RST/MIN管脚功能被设置为复位功能。 所有I/O管脚被设置为输入。 外围模块被初始化,其寄存器值为相关手册上注明的默认值。 状态寄存器(SR)复位。 看门狗激活,进入工作模式。 程序计数器(PC)载入0xFFFE(0xFFFE为复位中断向量)处的地址,微处理器从此地址开始执行程序。 4.典型的复位电路有以下3种: (1)由于MSP430具有上电复位功能, 因此,上电后只要保持RST/NMI(设置 为复位功能)为高电平即可。通 常的做法为,在RST/NMI管脚接100k? 的上拉电阻,如图1-5(a)所示。 (2)除了在RST/NMI管脚接100k?的 上拉电阻外,还可以再接0.1μF的电 容,电容的另一端接地,可以使复位 更加可靠。如图1-5(b)所示。 (3)由于MSP430具有极低的功耗,如 果系统断电后立即上电,则系统中电 容所存储的电荷来不及释放,此时系 统电压不会下降到最低复位电压以下, 因而MSP430不会产生上电复位,同时 RST/NMI管脚上也没有足够低的电平 使MSP430复位。这样,系统断电后立 即上电,MSP430并没有被复位。为了 解决这个问题,可增加一个二极管, 这样断电后储存在复位电容中的电荷 就可以通过二极管释放,从而加速电 容的放电。二极管的型号可取1N4008。 如图1-5(c)所示。

单片机原理及应用_第十讲_MSP430单片机的ADC实验报告

单片机原理及应用 第十讲 MSP430单片机的ADC 实验报告 报告人:学号:同组人员: 实验内容 实验1 AD采集输入电压并比较 实验2 AD内部温度采集实验 实验3 验收实验:温度采集与显示 把实验2中的实测温度值以摄氏度数值显示在段码LCD上。 实验步骤 步骤: (1) 将PC 和板载仿真器通过USB 线相连; (2) 打开CCS 集成开发工具,选择样例工程或自己新建一个工程,修改代码; (3) 选择对该工程进行编译链接,生成.out 文件。然后选择,将程序下载到实验板中。程序下载完毕之后,可以选择全速运行程序,也可以选择

单步调试程序,选择F3 查看具体函数。也可以程序下载之后,按下,软件界面恢复到原编辑程序的画面。再按下实验板的复位键,运 行程序。(调试方式下的全速运行和直接上电运行程序在时序有少许差别,建议 上电运行程序)。 关键代码: 实验1 AD采集输入电压并比较 #include int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT ADC12CTL0 = ADC12SHT02 + ADC12ON; // Sampling time, ADC12 on ADC12CTL1 = ADC12SHP; // Use sampling timer ADC12IE = 0x01; // Enable interrupt ADC12CTL0 |= ADC12ENC; P6SEL |= 0x01; // P6.0 ADC option select P4DIR |= BIT1; // P4.1 output while (1) { ADC12CTL0 |= ADC12SC; // Start sampling/conversion __bis_SR_register(LPM0_bits + GIE); // LPM0, ADC12_ISR will force exit __no_operation(); // For debugger } } #pragma vector = ADC12_VECTOR __interrupt void ADC12_ISR(void) { switch(__even_in_range(ADC12IV,34)) { case 0: break; // Vector 0: No interrupt case 2: break; // Vector 2: ADC overflow case 4: break; // Vector 4: ADC timing overflow

MSP430系列单片机特性及应用领域介绍

MSP430系列单片机特性及应用领域介绍 MSP430系列单片机是德州仪器1996年开始推向市场的一种16位超低功耗的混合信号处理器,给人们留下的最大的亮点是低功耗而且速度快,汇编语言用起来很灵活,寻址方式很多,指令很少,容易上手。主要是由于其针对实际应用需求,把许多模拟电路、数字电路和微处理器集成在一个芯片上,以提供“单片”解决方案。其迅速发展和应用范围的不断扩大,主要取决于以下的特点: 1、强大的处理能力,采用了精简指令集(RISC)结构,具有丰富的寻址方式(7 种源操作数寻址、4种目的操作数寻址)、简洁的27条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令;有较高的处理速度,在8MHz晶体驱动下指令周期为125ns。这些特点保证了可编制出高效率的源程序。 2、在运算速度方面,能在8MHz晶体的驱动下,实现125ns的指令周期。16位的数据宽度、125ns的指令周期以及多功能的硬件乘法器(能实现乘加)相配合,能实现数字信号处理的某些算法(如FFT等)。 3、超低功耗方面,MSP430单片机之所以有超低的功耗,是因为其在降低芯片的电源电压及灵活而可控的运行时钟方面都有其独到之处。电源电压采用的是1.8-3.6V电压。因而可使其在1MHz 的时钟条件下运行时,芯片的电流会在200-400uA左右,时钟关断模式的最低功耗只有0.1uA。 缺点1、个人感觉不容易上手,不适合初学者入门,资料也比较少,只能跑官网去找。2、占的指令空间较大,因为是16位单片机,程序以字为单位,有的指令竟然占6个字节。虽然程序表面上简洁,但与PIC单片机比较空间占用很大。 应用范围:在低功耗及超低功耗的工业场合应用的比较多。 使用最多的器件:MSP430F系列、MSP430G2系列、MSP430L09系列 TMS单片机这里也提一下TMS系列单片机,虽不算主流。由TI推出的8位CMOS单片机,具有多种存储模式、多种外围接口模式,适用于复杂的实时控制场合。虽然没STM32那么优秀,也没MSP430那么张扬,但是TMS370C系列单片机提供了通过整合先进的外

MSP430单片机AD转换实验

A/D转换实验 一、转换原理 MSP430F149的A/D转换器原理请参考相关书籍。 实验板上与AD相关的硬件电路 : 编程工作实际就就是对以下寄存器的操作: 寄存器类型寄存器缩写寄存器的含义 转换控制寄存器ADC12CTL0 转换控制寄存器0 ADC12CTL1 转换控制寄存器1 中断控制寄存器ADC12IFG 中断标志寄存器ADC12IE 中断使能寄存器ADC12IV 中断向量寄存器 存储及其 控制寄存器ADC12MCTL0 ~ ADC12MCTL15 存储控制寄存器0~15 ADC12MEM0 ~ ADC12MEM15 存储寄存器0~15 设计主程序与中断服务程序。 二、转换程序 1、程序1:转换结果发送到PC 主程序中进行A/D初始化,中断服务程序读A/D转换结果,主程序中通过串口发送结果。

“main、c”主程序与中断程序: /********************************************************* 程序功能:将ADC对P6、0端口电压的转换结果按转换数据与对应的模拟电压的形式通过串口发送到PC机屏幕上显示 ----------------------------------------------------------- 通信格式:N、8、1, 9600 ----------------------------------------------------------- 测试说明:打开串口调试精灵,正确设置通信格式,观察接收数据 **********************************************************/ #include #include "allfunc、h" #include "UART0_Func、c" #include "ADC_Func、c" #define Num_of_Results 32 uint results[Num_of_Results]; //保存ADC转换结果的数组 uint average; uchar tcnt = 0; /***********************主函数***********************/ void main( void ) { uchar i; uchar buffer[5]; WDTCTL = WDTPW + WDTHOLD; //关狗 /*下面六行程序关闭所有的IO口*/ P1DIR = 0XFF;P1OUT = 0XFF; P2DIR = 0XFF;P2OUT = 0XFF; P3DIR = 0XFF;P3OUT = 0XFF; P4DIR = 0XFF;P4OUT = 0XFF; P5DIR = 0XFF;P5OUT = 0XFF; P6DIR = 0XFF;P6OUT = 0XFF; P6DIR |= BIT2;P6OUT |= BIT2; //关闭电平转换 P6DIR|=BIT6;P6OUT&=~BIT6; //关闭数码管显示 InitUART(); Init_ADC(); _EINT(); buffer[4] = '\0';

MSP430单片机原理解读

第 2 章MSP430 单片机原理与 C 语言基础MSP430系列超低功耗单片机有200多种型号,TI公司用3~ 4位数字表示其型号。其中第一位数字表示大系列,如MSP430F1xx系列、MSP430F2xx系列、MSP430F4xx系列、MSP430F5xx系列等。在每个大系列中,又分若干子系列,单片机型号中的第二位数字表示子系列号,一般子系列越大,所包含的功能模块越多。最后1~2 位数字表示存储容量,数字越大表示RAM 和ROM 容量越大。430 家族中还有针对热门应用而设计的一系列专用单片机。如SP430FW4xx 系列水表专用单片机、MSP430FG4xx 系列医疗仪器专用单片机、MSP430FE4xx 系列电能计量专用单片机等。这些专用单片机都是在同型号的通用单片机上增加专用模块而构成的。最新的MSP430型号列表可以通过TI公司网站下载。 在开发单片机应用系统时,第一步就是单片机的选型,选择合适的单片机型号往往就能事半功倍。单片机选型基本方法是选择功能模块最接近项目需求的系列,然后根据程序复杂程度估算存储器和RAM 空间,并留有适当的余量,最终决定选用的单片机型号。 本章节以MSP430F249单片机为学习目标,介绍单片机的基本结构和工作原理,读者可以举一反三、触类旁通,而不必每种型号都去学习却无法深入掌握。 2.1 MSP430F249单片机基本结构与原理 2.1.1MSP430F249的主要结构特点 供电电压范围1.8V~3.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单片机的芯片封装形式如图2.1所示,各引脚的功能描述如表2-1 所列。 2.1.2 MSP430F249单片机的基本结构 MSP430F24x系列单片机功能结构示意图如图2.2所示。 (1)CPU简介 MSP430单片机的CPU为16位RISC精简指令集的处理器,只有27条正交汇编指令和7 种寻址方式。RISC 处理器基本上是为高级语言所设计的,编译程序对正交指令系统很容易做到最优化,利于产生高效紧凑的代码。MSP430CPU 中集成了16个16位通用寄存器 R0~R15,其中R0~R3分别复用为程序指针PC、堆栈指针SP、状态寄存器SR和常数发生器CG1/CG2。这些寄存器之间的操作只需要一个CPU 周期。

MSP430单片机实验指导书

试验一 一、实验目的 进一步熟悉IAR for MSP430编程软件和PROTEUS仿真软件的使用。了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。掌握MSP430单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。掌握PROTEUS仿真软件仿真MSP430单片机过程中的注意事项。 二、实验内容 1、运用PROTEUS仿真软件绘制LED流水灯电路; 2、运用IAR for MSP430编程软件编辑led流水灯程序,并且生成.hex 或.d90文件,并且将生成的文件加载到单片机中,程序使用P1或其它端口来演示跑马灯,输出低电平驱动。 三、实验器材 电脑一台 四、实验原理及介绍 LED流水灯实际上是一个带有发光二极管的单片机最小系统,即由led灯、电阻、电容器、电源等电路和必要的软件组成的单个的单片机;如果要让接在P1或其它端口的LED灯亮起来,那么只需要将P1或其它端口的电平变为低电平就可以了。同理,将该端口电平变为高电平,LED灯就会熄灭。 五、程序流程图 开始 端口初始化 LED顺序点亮 结束 六、实验步骤 1、运用PROTEUS仿真软件绘制电路图; 2、运用IAR for MSP430编写流水灯程序,并且生成‘’.hex’’或“.d90”文件

3、将‘’.hex’’或“.d90”文件软件加载到PROTEUS仿真软件中; 4、换一种流水灯的亮灭顺序,改变延时时间的大小,多次实验,灵活使用 七、参考程序 #include "msp430f249.h" #define uint unsigned int /******************** 主函数 **************************/ void main(void) { Uint I; WDTCTL = WDTPW + WDTHOLD; P1DIR = ox0ff; while(1) { PIOUT = 0x00; For(I = 0;I < 65565;I ++); PIOUT = 0x0ff; For(I = 0;I < 65565;I ++); } } 八、心得体会(二页以上)

基于MSP430单片机的交流电压测量设计

基于MSP430单片机的交流电压测量设计 东南大学仪器科学与工程学院 许欢 摘要:在单片机的一些测量中,有时候需要我们直接测量交流信号, 现介绍一种基于 msp430 单片机实现的交流电压的测量方法。 关键字:MSP430单片机,交流电压,测量,中断 日常生活及学习中, 我们一般需要之间测量交流信号, 测量交流信号的方法有很多, 而在 应用单片机的测量中,我们常常用来测量直流电压,现在将介绍一种基于 msp430单片机实 现的交流电压的测量方法。 系统的构成主要分硬件设计和软件设计两块来介绍。 硬件设计: 为了保证硬件电路设计的通用性, 采用单级性电压测量的方法, 将输入的双极性电压转换 成单级性电压进行测量。 整个电路主要包括极性转换电路和输入处理电路。 其中,极性转换 电路主要由放大电路实现,在此我采用 MCP 601放大芯片。 MCP601芯片:(Microchip 公司的一款高性能的放大芯片) Vcc 管脚:电源管脚 GND 管脚:接地管脚 VIN-管脚:负输入端管脚 VIN+管脚:正输入端管脚 OUT 管脚:输出管脚 极性转换电路设计: 在进行A/D 转换时,我们一般会采用芯片的工作电压作为 A/D 转换的参考电压。由于一般 芯片的工作电压都为正电压, 而我们在这里要测量交流电压, 所以要对输入的交流信号进行 极性转换,将双极性变成单级性。下图为极性转换电路: 如图所示,该芯片共有 8个管脚,

在极性转换电路中,ADOUT 为输出信号。输出信号是在输入信号 ADIN 的基础上叠加了一 个直流分量,调节上面的 Vref 的值就可以改变直流分量的值。如果调节 Vref 使直流分量的 值为1.5V ,并且此时输入信号是幅值为 1.5V 的交流正弦信号,那么输出信号就为最大值为 3V ,最小值为0V 的单级性正弦信号。在极性转换电路基础上我们将很容易设计出我们要的 输入电路。 输入处理电路: 在极性转换电路基础上,输入处理电路需要将 220V 的交流电压信号变为幅值为 1.5V 左右 的交流信号,此外,还需要为 MCP 601提供适当的参考电压信号。电路如下图所示: 从所设计的电路中我们可以得到, 首先通过变压器将 220V 的交流电压降成 8V 的交流电压, 再经过极性转换电路将双极性的交流电压转换为单级性的交流电压。电路中的 R405电位器 主要用于调节参考电压, R404电位器用于调节交流输入电压的幅度。 经过上面电路的处理, 可以将输入的交流电压转换成 0?3V 的单级性交流电压,这样很容易使用 MSP430单片机 自带的A/D 转换通道进行模拟量采集,从而实现交流电压的测量。 在上面的电路中,电压采用 3V 供电,电源芯片采用 TPS76030,实现电路如下图所示: R403 0.0 4.19K 厂 C4M 二 R401 4 721t C404 O.O47nf tic NC _S O.lnf ^C4C2 V1H- Vcc 7 J ■ ? r riTTT —s UU 1 GHD HC _5 2 kDOUT 琴曲 3 MOI~ —斗 I 01肚

相关主题
文本预览
相关文档 最新文档