MSP430F5529实验指导书.docx

上传人:b****5 文档编号:6498294 上传时间:2023-01-07 格式:DOCX 页数:36 大小:32.75KB
下载 相关 举报
MSP430F5529实验指导书.docx_第1页
第1页 / 共36页
MSP430F5529实验指导书.docx_第2页
第2页 / 共36页
MSP430F5529实验指导书.docx_第3页
第3页 / 共36页
MSP430F5529实验指导书.docx_第4页
第4页 / 共36页
MSP430F5529实验指导书.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

MSP430F5529实验指导书.docx

《MSP430F5529实验指导书.docx》由会员分享,可在线阅读,更多相关《MSP430F5529实验指导书.docx(36页珍藏版)》请在冰豆网上搜索。

MSP430F5529实验指导书.docx

MSP430F5529实验指导书

 

MSP430F5529实验指导书

 

()

 

2014年10月27日

东北林业大学机电工程学院“3+1”实验室

实验一基础GPIO实验

实验二键盘与液晶显示实验

实验三时钟系统配置实验

实验四看门狗与定时器实验

实验五AD/DA实验

实验六比较器实验

实验七Flash实验

实验八串行通信实验

 

实验一基础GPIO实验

【实验目的】

1、熟悉CCS的基本使用方法;

2、掌握MSP430系列单片机程序开发的基本步骤;

3、掌握MSP430IO口的基本功能。

【实验仪器】

1、开发板一套;

2、PC机操作系统WindowsXP或Windows7,集成开发环境。

【实验原理】

CCS(CodeComposerStudio)是TI公司研发的一款具有环境配置、源文件编辑、程序调试、跟踪和分析等功能的集成开发环境,能够帮助用户在一个软件环境下完成编辑、编译、链接、调试和数据分析等工作。

为CCS软件的最新版本,功能更强大、性能更稳定、可用性更高,是MSP430软件开发的理想工具。

开发板上的有8个可操作的LED灯,与MCU的IO口对应关系如图1-1所示:

图1-1LED与MCU的IO对应关系电路

我们可以通过控制单片机IO口的输出电平状态来控制各个LED灯的亮灭。

开发板上还有2个可操作的按键S1,S2。

如图1-2所示。

图1-2按键电路

我们可以通过读取与按键相连的IO口的输入电平状态来执行相应的操作。

此外,S1,S2还可以作为外部中断源,触发中断。

【实验内容】

1、用调用头文件的方法,使能MSP430F5529开发板上的8个LED灯依次按顺序循环点亮;

2、用按键S1控制开发板上LED1的亮灭状态(查询法);

3、用按键S2控制开发板上跑马灯的循环速度(中断方式)。

【实验步骤】

内容1:

使能开发板上的8个LED灯依次按顺序循环点亮

1、打开CCSv5并确定工作区间,然后选择File-->New-->CCSProject弹出图1-3对话框。

图1-3新建一个CCS工程

2、在Projectname中输入新建工程的名称,在此输入lab1_1。

3、在Device部分选择器件的型号:

在此Family选择MSP430;Variant选择MSP430X5XXfamily,芯片选择MSP430F552;其余保持默认。

4、在左下角对话框中,选择EmptyProjects下拉菜单下的EmptyProject(空工程),单击Finish。

5、在新窗口中输入如下代码:

#include<>

voidmain(void)

{

volatileunsignedinti;

WDTCTL=WDTPW+WDTHOLD;//32x32xMHz/32,768Hz=76563=MCLKcyclesforDCOtosettle

__delay_cycles(76563);

//LoopuntilXT1,XT2&DCOfaultflagiscleared

do

{

UCSCTL7&=~(XT2OFFG+XT1LFOFFG+0x0004+DCOFFG);//ClearXT2,XT1,DCOfaultflags

SFRIFG1&=~OFIFG;//Clearfaultflags

}while(SFRIFG1&OFIFG);//Testoscillatorfaultflag

while

(1);//Loopinplace

}

3、编译、调试并下载程序到开发板。

4、运行程序,用示波器观察、、口的输出波形。

【思考与分析】

1、在不做任何配置的情况下,MSP430F5529单片机的各个时钟的默认值是多少?

试编程加以验证。

2、试编写程序验证MSP430F5529单片机的主时钟频率最大可达到多少?

3、MSP430系列单片机最大的特点是低功耗,低功耗是如何体现的?

查阅资料,加以详细论述。

实验四看门狗与定时器实验

【实验目的】

1、了解看门狗定时器的基本作用;

2、学会使用定时器在MSP430的某一引脚输出特定占空比的方波;

3、掌握MSP430系列单片机定时器的几种工作模式;

4、熟悉MSP430系列单片机定时器的比较/捕获功能。

【实验仪器】

1、MSP430G2553LaunchPad一块,MSP430F5529MiniBoard一块;

2、键盘接口一块,液晶屏一块;

3、TDS210双踪示波器一台;

4、PC机操作系统WindowsXP或Windows7,集成开发环境。

【实验原理】

看门狗定时器主要用于在程序跑飞时,则不会在看门狗定时时间到达之前执行看门狗清零指令,看门狗就会溢出,从而使系统产生复位,保证程序的正常运行。

16位定时器的计数值寄存器TAR在每个时钟信号的上升沿进行增加/减少,可利用软件读取TAR寄存器的计数值。

此外,当定时时间到,产生溢出时,定时器可产生中断。

置位定时器控制寄存器中的TACLR控制位,可自动清除TAR寄存器的计数值,同时,在增/减计数模式下,清除了时钟分频器和计数方向。

Timer_A共有4种工作模式:

停止模式、增计数模式、连续计数模式和增/减计数模式,具体工作模式可以通过MC控制位进行选择,具体配置如表4-1所示。

表4-1Timer_A工作模式配置列表

MC控制位配置值

Timer_A工作模式

描述

00

停止模式

Timer_A停止

01

增计数模式

Timer_A从0到TAxCCR0重复计数

10

连续计数模式

Timer_A从0到0FFFFh重复计数

11

增/减计数模式

Timer_A从0增计数到TAxCCR0之后减计数到0,循环往复

定时器Timer_A的捕获模式:

当CAP控制位置为1时,捕获/比较模块配置为捕获模式。

捕获模式被用于捕获事件发生的时间。

捕获输入CCIxA和CCIxB可连接外部引脚或内部信号,这需通过CCIS控制位进行配置。

可通过CM控制位将捕获输入信号触发沿配置为上升沿触发、下降沿触发或两者都触发。

捕获事件在所选输入信号触发沿产生,如果产生捕获事件,定时器将完成以下工作:

?

主计数器计数值复制到TAxCCRn寄存器中;

?

置位中断标志位CCIFG。

【实验内容】

1、使用看门狗定时功能产生一个方波(周期性的取反);

2、利用定时器TA0,使其工作在增计数模式下,选择ACLK作为其参考时钟。

将和引脚配置为定时器输出,且使CCR1和CCR2工作在比较输出模式7下,最终使引脚输出75%占空比的PWM波形,使引脚输出25%占空比的PWM波形。

3、选择键盘上的一个按键,当该按键按下一次时,打开定时器开始计时,利用定时器的捕获功能,捕捉该按键再次按下时的精确时间,并将该时间显示在液晶显示屏上。

【实验步骤】

内容1:

看门狗定时器产生方波信号

1、建立新工程,并命名为lab4_1。

2、在新建工程的编辑窗口输入如下代码:

#include<>

voidmain(void)

{

WDTCTL=WDTPW+WDTCNTCL+WDTSSEL0+WDTIS_5;

//看门狗定时器工作在看门狗模式,定时1S,选择ACLK作为参考时钟

P1DIR|=0x01;//设置端口为输出

P1OUT^=0x01;//反转端口状态

__bis_SR_register(LPM3_bits+GIE);//进入低功耗模式3,并启用中断

}

3、编译、调试并下载程序到开发板。

4、运行程序,用示波器观察口的输出波形。

内容2:

用定时器产生特定占空比的PWM信号

1、建立新工程,步骤同上,并命名为lab4_2。

2、在新建工程的编辑窗口输入如下代码:

#include<>

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

P1DIR|=BIT2+BIT3;//和设为输出

P1SEL|=BIT2+BIT3;//和引脚功能选为定时器输出

TA0CCR0=512-1;//PWM周期定义

TA0CCTL1=OUTMOD_7;//CCR1比较输出模式7:

复位/置位

TA0CCR1=384;//CCR1PWM占空比定义

TA0CCTL2=OUTMOD_7;//CCR2比较输出模式7:

复位/置位

TA0CCR2=128;//CCR2PWM占空比定义

TA0CTL=TASSEL_1+MC_1+TACLR;//ACLK,增计数模式,清除TAR计数器

__bis_SR_register(LPM3_bits);//进入LPM3

}

3、编译、调试并下载程序到开发板。

4、运行程序,用示波器观察、口的输出波形。

内容3:

用定时器的捕获功能捕捉开发板上按键按下的精确时间。

1、将单片机、独立键盘和MSP430G2553LaunchPad仿真器部分用杜邦线连接起来。

2、导入工程“Lcd_and_Key”,并在此基础上添加Timer的相关文件:

和。

文件如下:

/***********************************Copyright(c)*******************************

**东北林业大学机电工程学院

**3+1创新实验室

**文件信息-----------------------------------------

**文件名:

**创建人:

刘毅

**最后修改日期:

2014年11月13日

**描述:

**---------------------------历史版本信息-------------------------------------

**创建人:

刘毅

**版本:

**日 期:

2014年11月13日

**描 述:

原始版本

******************************************************************************/

#include<>

#include""

#include""

#include<>

intpressent_time;//定义当前时间

/**********************************************************************

函数名:

TA1_Init()

功能:

对TimerA1进行初始化

入口参数:

返回值:

**********************************************************************/

voidTA1_Init()

{

P1DIR&=~BIT7;

P1SEL|=BIT7;//将引脚配置为定时器捕获输入

P1OUT|=BIT7;

P1REN|=BIT7;//设置为内部上拉

TA1CTL=TASSEL_1+ID_3;//TA1主计数器时钟选择ACLK,8分频

//TA1EX0=TAIDEX_7;//分频扩展,8分频,timerclock=32768/8/8=512Hz

//最大定时时间:

65526/512=128s

TA1CCTL0=CM1+SCS+CAP+CCIE;//CCR0工作于捕获模式,下降沿触发

}

/**********************************************************************

函数名:

TA1_Start()

功能:

启动TimerA1

入口参数:

返回值:

**********************************************************************/

voidTA1_Start()

{

TA1CTL|=MC_2+TACLR;//清除TAR,选择连续计数模式

}

/**********************************************************************

函数名:

TimerA1中断服务子程序

功能:

读取捕获值

入口参数:

返回值:

**********************************************************************/

#pragmavector=TIMER0_A1_VECTOR

__interruptvoidTIMER0_A1_ISR(void)

{

//charstr[80];

pressent_time=(TA1CCR0+1)/512;//捕获当前时间,单位ms

LCD_ShowNum(32,16,pressent_time,3);

//sprintf(str,"Theperssentis:

%d",pressent_time);

//LCD_ShowString(32,16,str);

_delay_cycles(300000);

TA1CCTL0&=~CCIFG;//清除中断标志位

}

文件如下:

/***********************************Copyright(c)*******************************

**东北林业大学机电工程学院

**3+1创新实验室

**文件信息-----------------------------------------

**文件名:

**创建人:

刘毅

**最后修改日期:

2014年11月13日

**描述:

**---------------------------历史版本信息-------------------------------------

**创建人:

刘毅

**版本:

**日 期:

2014年11月13日

**描 述:

原始版本

******************************************************************************/

#ifndefTIMER_H_

#defineTIMER_H_

externvoidTA1_Init();

externvoidTA1_Start();

#endif/*TIMER_H_*/

3、在文件的主函数中调用Timer相关函数。

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;//关闭开门狗

……

TA1_Init();

TA1_Start();

__bis_SR_register(GIE);

……

while

(1)

{

}

}

4、编译、调试并下载程序到开发板。

5、运行程序,按下按键,观察液晶屏上捕获到的时间值。

【思考与分析】

1、利用定时器TA0实现开发板上的第一个LED灯以200ms间隔闪烁,同时利用定时器TA2实现液晶屏上的一个两位数以59s循环计时。

2、试利用MSP430的定时器捕获功能做一个频率计。

 

实验五AD/DA实验

【实验目的】

1、了解AD的工作原理;

2、熟悉ADC12的4种转换模式;

3、掌握MSP430F5529的ADC12基本使用方法。

4、掌握MSP430F6638的DAC的基本使用方法。

【实验仪器】

1、开发板一套;

2、键盘接口一块,液晶屏一块;

3、PC机操作系统WindowsXP或Windows7,集成开发环境。

【实验原理】

模数转换器的作用是把从传感器采集到的连续变化的模拟电压信号转换为单片机可识别的数字信号。

在转换的过程中,数字输出代码与模拟输入电压之间的关系如图5-1所示。

图5-1数字输出代码与模拟输入电压之间的关系

数字量的计算方法:

ADC内核一般要使用两个参考电压VR+和VR-,一般这两个电压可以是用户接入或者是使用内部参考电压。

VR+是定义的转换最大值,VR-则是转换的最小值。

以12位分辨率为例。

•Vin>=VR+ADC12输出满量程值0x0FFF;

•Vin<=VR-ADC12输出0;

•VR-

NADC=4095*(Vin-VR-)/(VR+-VR-)

【实验内容】

1、利用开发板上的齿轮电位器进行采样,并将采样得到的模拟电压转换为数字量,在液晶屏上显示出来,并同时显示所采样的模拟电压值。

2、利用A10通道采样内部温度传感器,并将采样的数值转化为摄氏和华氏温度,分别在液晶屏上显示出来。

3、试编写程序,从MSP430F6638单片机的DA引脚输出一个正弦波。

【实验步骤】

内容1:

用电位器采样模拟电压并显示

1、导入工程“Lcd_and_Key”,改写程序,将开发板与键盘接口连接起来,将原程序中的P1口改写为P7口。

2、并在此基础上添加ADC12的相关文件:

和。

文件如下:

/***********************************Copyright(c)*******************************

**东北林业大学机电工程学院

**3+1创新实验室

**文件信息-----------------------------------------

**文件名:

**创建人:

刘毅

**最后修改日期:

2014年11月13日

**描述:

**---------------------------历史版本信息-------------------------------------

**创建人:

刘毅

**版本:

**日 期:

2014年11月13日

**描 述:

原始版本

******************************************************************************/

#include""

#include""

#include<>

#include<>

/******************************************************************************

函数名:

ADC_Init()

功能:

ADC12初始化

入口参数:

返回值:

******************************************************************************/

voidADC_Init()

{

volatileunsignedinti;

P6SEL|=BIT5;//将引脚设为ADC输入功能

ADC12CTL0=ADC12ON+ADC12SHT02+ADC12MSC;//打开ADC12,设置采样间隔,序列采样

ADC12CTL1=ADC12SHP+ADC12CONSEQ_2+ADC12SSEL_1+ADC12CSTARTADD_5;

//采样保持触发信号选择采样定时器,设置单通道多次转换模式,时钟源选择ACLK,ADC转换开始地址ADC12MEM5

ADC12MCTL5|=ADC12SREF_0+ADC12INCH_5;//Vr+=AVcc,Vr-=AVss,输入通道5

ADC12IE=BIT5;//使能ADC中断

for(i=0;i<0x30;i++);//延迟以使参考电压产生稳定

ADC12CTL0|=ADC12ENC;//置位ADC12ENC控制位,使能AD转换

}

/******************************************************************************

函数名:

ADC_Start()

功能:

启动AD转换

入口参数:

返回值:

******************************************************************************/

voidADC_Start()

{

ADC12CTL0|=ADC12SC;//启动AD转换

}

/******************************************************************************

函数名:

ADC_Stop()

功能:

停止AD转换

入口参数:

返回值:

******************************************************************************/

voidADC_Stop()

{

ADC12CTL0&=~ADC12ON;

//ADC12CTL0&=~ADC12SC;//禁止AD转换

}

/******************************************************************************

函数名:

ADC12中断服务程序

功能:

入口参数:

返回值:

******************************************************************************/

#pragmavector=ADC12_VECTOR

__interruptvoidADC12_ISR(void)

{

floata;

volatilefloatu;

switch(__even_in_range(ADC12IV,34))

{

case0:

break;//Vector0:

无中断

case2:

break;//Vector2:

ADC溢出中断

case4:

break;//Vector4:

ADC转换时间溢出中断

case6:

break;//Vector6:

ADC12IFG0

case8:

break;//Vector8:

ADC12IFG1

case10:

break;//Vector10:

ADC12IFG2

case12:

break;//Vector12:

ADC12IFG3

case14:

break;//Vector14:

ADC12IFG4

case16:

//Vector16:

ADC12IFG5

//if(ADC12MEM5>=0x7ff)//ADC12MEM=A0>

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1