中国石油大学胜利学院MSP430期末考试题库.docx

上传人:b****1 文档编号:13343852 上传时间:2023-06-13 格式:DOCX 页数:53 大小:3.22MB
下载 相关 举报
中国石油大学胜利学院MSP430期末考试题库.docx_第1页
第1页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第2页
第2页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第3页
第3页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第4页
第4页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第5页
第5页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第6页
第6页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第7页
第7页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第8页
第8页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第9页
第9页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第10页
第10页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第11页
第11页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第12页
第12页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第13页
第13页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第14页
第14页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第15页
第15页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第16页
第16页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第17页
第17页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第18页
第18页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第19页
第19页 / 共53页
中国石油大学胜利学院MSP430期末考试题库.docx_第20页
第20页 / 共53页
亲,该文档总共53页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

中国石油大学胜利学院MSP430期末考试题库.docx

《中国石油大学胜利学院MSP430期末考试题库.docx》由会员分享,可在线阅读,更多相关《中国石油大学胜利学院MSP430期末考试题库.docx(53页珍藏版)》请在冰点文库上搜索。

中国石油大学胜利学院MSP430期末考试题库.docx

中国石油大学胜利学院MSP430期末考试题库

MSP430实验一

1.熟悉开发环境,掌握USB下载软件的方法。

2.用汇编语言实现:

P2.0-P2.7依次点亮(参考开发板原理图)

要求先软件仿真调试程序,无误后再下载到开发板运行

3.用C语言实现上述功能,其它要求同上。

汇编语言参考程序清单:

#include;包含msp430.h文件

;NAMEmain;模块名称定义

;PUBLICmain;

ORG0FFFEh;中断向量表复位向量地址

DC16init;存放用户程序入口地址,复位后开始执行

RSEGDATA16_C;在ROM中存放LED显示值

LEDdataDB01h,02h,04h,08h,10h,20h,40h,80h

RSEGCSTACK;定义堆栈段

RSEGCODE定义代码段

init:

MOV#SFE(CSTACK),SP;初始化堆栈指针

main:

NOP;mainprogram

MOV.W#WDTPW+WDTHOLD,&WDTCTL;关闭看门狗定时器

MOV.b#0,&P2SEL;设置P1为基本I/O

MOV.b#0FFh,&P2DIR;设置P1为输出端口

MOV.b#0,&P2OUT;使8个LED全灭

again:

MOV#LEDdata,R4;取输出表格首地址

MOV#8,R5;循环控制次数

next:

MOV.b@R4+,&P2OUT;取表中的某一种状态输出

CALL#delay;延时

DECR5;判断8种状态是否输出完

JNZnext;否,继续

JMPagain;重新从表头开始

delay:

PUSHSR;延时

mov#20,R7

WAIT1:

MOV#0FFFFh,R6;

A123:

DECR6

JNZA123

decR7

JNZWAIT1

POPSR

RET

END;

 

C语言参考程序:

#include"msp430f149.h"

voiddelay();

intmain(void)

{unsignedcharLEDdata[]={1,2,4,8,0x10,0x20,0x40,0x80};

unsignedinti;

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

P2SEL=0;//设置P1为基本I/O

P2DIR=0xFF;//设置P1为输出端口

P2OUT=0;//使8个LED全灭

while

(1)//无限循环

{

for(i=0;i<8;i++)//8个LED依次点亮

{P2OUT=LEDdata[i];//

delay();//调用延时子程

}

};

}

voiddelay()

{unsignedinti;//定义函数变量

for(i=0;i<0xffff;i++);//延时

}

 

MSP430实验2

P1.0作为中断输入端,下降沿触发,当有中断请求时取反P2.0状态。

P1.0的硬件接线参考原理图。

1、用汇编语言实现(参考程序如下)

#include"msp430.h"

NAMEmain

PUBLICmain

ORG0FFFEh

DC16init;setresetvectorto'init'label

ORG0FFE0h+PORT1_VECTOR;中断向量表首地址+端口1中断偏址

DC16intP1;setport1vectorto‘intP1’label

RSEGCSTACK;定义堆栈段

RSEGCODE;代码段

init:

MOV#SFE(CSTACK),SP;初始化SP

main:

NOP

MOV.w#WDTPW+WDTHOLD,&WDTCTL;关闭看门狗

BIC.b#BIT0,&P1IE;关闭P1.0中断允许

BIC.b#BIT0,&P2SEL;设置P2.0为基本I/O功能

BIS.b#BIT0,&P2DIR;设置P2.0为输出

BIC.b#BIT0,&P2OUT;置P2.0输出初值为0

BICb#BIT0,&P1SEL;置P1.0作为基本I/O端口

BIC.b#BIT0,&P1DIR;置P1.0为输入

BIS.b#BIT0,&P1IES;置P1.0下降沿作中断源

BIC.b#BIT0,&P1IFG;清P1.0中断标志

BIS.b#BIT0,&P1IE;打开P1.0中断允许

EINT;允许可屏蔽中断GIE=1

JMP$;主程循环

intP1:

BIT.b#BIT0,&P1IFG;判断是否是P1IFG.0中断标志

JZexit;不是则跳转

XOR.b#BIT0,&P2OUT;对P2.0取反

BIC.b#BIT0,&P1IFG;清P1.0中断标志

exit:

RETI

END

2.用C语言实现(参考程序如下)

#include"msp430x14x.h"

intmain(void)

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

_DINT();//禁止可屏蔽中断GIE=0

P1IE|=~BIT0;//关闭P1.0中断允许

P2SEL|=~BIT0;//设置P2.0为基本I/O功能

P2DIR|=BIT0;//设置P2.0为输出

P2OUT&=~BIT0;//置P2.0输出初值为0

P1SEL&=~BIT0;//置P1.0作为基本I/O端口

P1DIR=0XFE;//置P1.0为输入

P1IES&=~BIT0;//置P1.0下降沿作中断源

P1IFG=0X00;//清P1.0中断标志

P1IE|=BIT0;//打开P1.0中断允许

_EINT();//允许可屏蔽中断GIE=1

while

(1){};//主程循环

}

#pragmavector=PORT1_VECTOR//置P1中断向量

__interruptvoidport_int(void)//中断子程

{if(P1IFG==BIT0)//判断是否是P1IFG.0中断标志

{

P2OUT^=BIT0;//对P2.0取反

P1IFG&=~BIT0;//清P1.0中断标志

}

}

修改程序,使P1.0为上升沿触发中断,观察程序运行的差异。

 

串行口实验

#include

voidmain(void)

{

//关电平转换

WDTCTL=WDTPW+WDTHOLD;//StopWDT

P3SEL|=0x30;//P3.4,5=USART0TXD/RXD

ME1|=UTXE0+URXE0;//EnableUSART0TXD/RXD

UCTL0|=CHAR;//8-bitcharacter

UTCTL0|=SSEL0;//UCLK=ACLK

UBR00=0x0D;//32k/2400-13.65

UBR10=0x00;//

UMCTL0=0x6B;//Modulation

UCTL0&=~SWRST;//InitializeUSARTstatemachine

IE1|=URXIE0;//EnableUSART0RXinterrupt

//Mainloop

for(;;)

{

_BIS_SR(LPM3_bits+GIE);//EnterLPM3w/interrupt

while(!

(IFG1&UTXIFG0));//USART0TXbufferready?

TXBUF0=RXBUF0;//RXBUF0toTXBUF0

}

}

//UART0RXISRwillforexitfromLPM3inMainloop

#pragmavector=UART0RX_VECTOR

__interruptvoidusart0_rx(void)

{

_BIC_SR_IRQ(LPM3_bits);//ClearLPM3bitsfrom0(SR)

}

 

实验3

系统时钟部分:

注:

DCOCTL:

地址为056H,PUC后的值为060H

BCSTCL1:

地址为057H,PUC后的值为084H

BCSTCL2:

地址为058H,PUC后值为00H

怎样改变系统时钟?

因为PUC信号之后,DCOCLK被自动选做MCLK时钟信号,根据需要,MCLK的时钟源可以另外设置为LFXT1或者XT2.设置顺序如下:

1.复位OscOff;

2.清除OFIFG;

3.延时等待至少50us;

4.再次检查OFIFG,如果仍然置位,则重复3,4步骤,直到OFIFG=0为止。

MSP430x14x与时钟模块有关的几个引脚

引脚名称

引脚序号

第二功能

P1.4/SMCLK

12

SMCLK信号输出

P2.0/ACLK

20

ACLK信号输出

P5.4/MCLK

48

MCLK信号输出

P5.5/SMCLK

49

SMCLK信号输出

P5.6/ACLK

50

ACLK信号输出

XIN

8

晶体振荡器XT1的输入口

XOUT/TCLK

9

晶体振荡器XT1的输出口或测试时钟输入口

XT2IN

53

晶体振荡器XT2的输入口

XT2OUT

52

晶体振荡器XT2的输出口

P2.5/Rosc

25

外界一电阻以确定DCO的工作频率

基础时钟模块试验程序1:

设MCLK=XT2,SMCLK=DCOCLK,将MCLK由5.4输出程序如下:

#include

voidmain(void)

{

unsignedinti;

WDTCTL=WDTPW+WDTHOLD;//停止看门狗

P5DIR|=0X10;//设置P5.4为输出

P5SEL|=0X10;//设置P5.4为MCLK输出

BCSCTL1&=~XT2OFF;//设置XT2为有效

do{

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

for(i=0xFF;i>0;i--);//稳定时间

}

while((IFG1&OFIFG)!

=0);//如果振荡器失效标志存在则继续循环。

BCSCTL2|=SELM1;//设置MCLK=XT2

for(;;);

}

基础时钟模块试验程序2:

设置ACLK=MCLK=LFXT1=LF,将MCLK通过P5.4输出。

#include

voidmain(void)

{

unsignedinti;

WDTCTL=WDTPW+WDTHOLD;//停止看门狗

//P5DIR|=0X10;//设置P5.4为输出

P5SEL|=0X10;//设置P5.4为MCLK输出

BCSCTL1&=~XTS;//设置LFXT1为低速模式

do{

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

for(i=0xFF;i>0;i--);//稳定时间

}

while((IFG1&OFIFG)!

=0);//如果振荡器失效标志存在则继续循环

BCSCTL2|=SELM1+SELM0;//设置MCLK=LFXT1

for(;;);

}

低功耗部分:

试验程序1:

#include

voidmain(void)

{

BCSCTL1|=DIVA_2;//ACLK/4

WDTCTL=WDT_ADLY_1000;//WDT1s/4intervaltimer

IE1|=WDTIE;//EnableWDTinterrupt

P3DIR|=BIT1;//SetP3.1tooutputdirection

P3OUT&=~BIT1;//SetP3.1to0

while

(1)

{

inti;

_BIS_SR(LPM3_bits+GIE);//EnterLPM3

P3OUT|=BIT1;//SetP3.1LEDon

for(i=5000;i>0;i--);//Delay

P3OUT&=~BIT1;//ClearP3.1LEDoff

}

}

#pragmavector=WDT_VECTOR

__interruptvoidwatchdog_timer(void)

{

_BIC_SR_IRQ(LPM3_bits)//ClearLPM3bitsfrom0(SR)

}

看门狗定时器:

看门狗定时器实验程序:

#include

voidmain(void)

{

WDTCTL=WDT_MDLY_32;//定时周期为32ms

IE1|=WDTIE;//使能WDT中断

P1DIR|=0x01;//P1.0输出

_EINT();//系统中断允许

for(;;)

{

_BIS_SR(CPUOFF);//进入LPM0

_NOP();

}

}

//看门狗中断服务子程序

#pragmavector=WDT_VECTOR

__interruptvoidwatchdog_timer(void)

{

P1OUT^=0x01;//P1.0取反

}

 

实验5(定时器部分)

相关寄存器

 

一、

1、分析给定程序,在重要语句后加上注释,

2、改变定时器的时钟源,计算相关引脚的翻转频率

3、改变定时器的计数模式,(增计数或连续计数)

4、开放捕获比较模块1和模块2的中断,要求模块1的翻转频率为模块0的一倍;模块2是模块1的一倍。

5、若定时器选用辅助时钟,计数器采用增模式计数,利用模块0的中断使P20的翻转频率为100HZ.

#include

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;//

P6DIR|=BIT2;P6OUT|=BIT2;//关电平转换

P2DIR|=BIT0+BIT7;//

CCTL0=CCIE;//CCR0interruptenabled

CCR0=33;//

TACTL=TASSEL_1+MC_1;//

_BIS_SR(LPM0_bits+GIE);//

}

//TimerA0interruptserviceroutine

#pragmavector=TIMERA0_VECTOR//

__interruptvoidTimer_A(void)

{

P2OUT^=BIT0;//

CCR0+=32768;//

}

#pragmavector=TIMERA1_VECTOR//

__interruptvoidTimer_A1(void)

{

switch(TAIV)

{

case0x02:

break;//

case0x04:

break;//

case10:

P2OUT^=BIT7;//

break;

}

}

二、

实验要求:

1、示波器分别连接P1.2和P1.3,改变CCR1和CCR2观察占空比的变化。

2、改变CCR0的值,观察PWM的周期或频率的变化。

3、修改如下程序,使PWM的频率为100HZ,占空比为50﹪.

#include

Voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;

P1DIR|=0X0C;

PISEL|=0X0C;//P1.2和P1.3为模块功能

CCR0=512-1;//PWM的宽度

CCTL1=OUTMOC_7;//CCR1的输出单元P1.2复位/置位模式

CCR1=384;

CCTL2=OUTMOD_7;

CCR2=128;

TACTL=TASSEL_1+MC_1;

_BIS_SR(LPM3_bits);

 

}

三、CCR0捕获比较寄存器的捕获功能应用

基本原理:

每产生一次上升沿,在中断服务程序中取反P0.7,用示波器测量验证捕获信号的周期。

实验要求:

用导线连接P2.0—P1.1,示波器接在P2.7端口。

改变辅助时钟的频率被测信号的周期。

#include

unsignedintnew_cap=0;

unsignedintold_cap=0;

unsignedintcap_diff=0;

unsignedintdiff_array[16];

unsignedintcapture_array[16];

unsignedcharindex=0;

unsignedcharcount=0;

voidmain(void)

{

volatileunsignedinti;

WDTCTL=WDTPW+WDTHOLD;

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

{}

P1DIR=0X01;

P1OUT&=~0X01;

P1SEL=0X02;

P2DIR=0X01;

P2SEL|=0X01;//P2.0为辅助时钟的输出

BCSCTL1|=DIVA_3;

CCTL0=CM1+SCS+CCIS_0+CAP+CCIE;//上升捕获+同步+CCI0A(P1.1信号源)+捕获功能+捕获中断

TACTL=TASSEL_2+MC_2;

_BIS_SR(LPM0_bits+GIE);

}

#pragmavector=TIMERA0_VECTOR

__interruptvoidtimera0(void)

{

new_cap=TACCR0;

cap_diff=new_cap-old_cap;

diff_array[index]=cap_diff;

capture_array[index++]=new_cap;

P2OUT^=BIT7;

if(index==16)

{

index=0;

P1OUT^=0X01;

}

old_cap=new_cap;

count++;

if(count==32)

{

count=0;

_NOP();

}

}

 

试验程序:

1、

//MSP-FET430P140Demo-USART0,Ultra-LowPwrUART2400EchoISR,32kHzACLK

//

//Description:

Echoareceivedcharacter,RXISRused.IntheMainloopUART0

//ismadereadytoreceiveonecharacterwithinterruptactive.TheMainloop

//waitsinLPM3.TheUART0ISRforcestheMainlooptoexitLPM3after

//receivingonecharacterwhichecho'sbackthereceivedcharacter.

//ACLK=UCLK0=LFXT1=32768,MCLK=SMCLK=DCO~800k

//Baudratedividerwith32768hzXTAL@2400=32768Hz/2400=13.65(000Dh)

////*AnexternalwatchcrystalisrequiredonXINXOUTforACLK*//

//

//MSP430F149

//-----------------

///|\|XIN|-

//|||32kHz

//--|RSTXOUT|-

//||

//|P3.4|----------->

//||2400-8N1

//|P3.5|<-----------

//

//

//M.Buccini

//TexasInstrumentsInc.

//Feb2005

//BuiltwithIAREmbeddedWorkbenchVersion:

3.21A

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

#include

voidmain(void)

{

P6DIR|=BIT2;P6OUT|=BIT2;//关电平转换

WDTCTL=WDTPW+WDTHOLD;//StopWDT

P3SEL|=0x30;//P3.4,5=USART0TXD/RXD

ME1|=UTXE0+URXE0;//EnableUSART0TXD/RXD

UCTL0|=CHAR;//8-bitcharacter

UTCTL0|=SSEL0;//UCLK=ACLK

UBR00=0x0D;//32k/2400-13.65

UBR10=0x00;//

UMCTL0=0x6B;//Modulation

UCTL0&=~SWRST;//InitializeUSARTstatemachine

IE1|=URXIE0;//EnableUSART0RXinterrupt

//Mainloop

for(;;)

{

_BIS_SR(LPM3_bits+GIE);//EnterLPM3w/interrupt

while(!

(IFG1&UTXIFG0));//USART0TXbufferready?

TXBUF0=RXBUF0;//RXBUF0toTXBUF0

}

}

//UART0RXISRwillforexitfromLPM3inMainloop

#pragmavector=UART0RX_VECTOR

__interruptvoi

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

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2