中国石油大学胜利学院MSP430期末考试题库.docx
- 文档编号:9085336
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:49
- 大小:2.93MB
中国石油大学胜利学院MSP430期末考试题库.docx
《中国石油大学胜利学院MSP430期末考试题库.docx》由会员分享,可在线阅读,更多相关《中国石油大学胜利学院MSP430期末考试题库.docx(49页珍藏版)》请在冰豆网上搜索。
中国石油大学胜利学院MSP430期末考试题库
MSP430实验一
1.熟悉开发环境,掌握USB下载软件的方法。
2.用汇编语言实现:
P2.0-P2.7依次点亮(参考开发板原理图)
要求先软件仿真调试程序,无误后再下载到开发板运行
3.用C语言实现上述功能,其它要求同上。
汇编语言参考程序清单:
#include
;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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国 石油大学 胜利 学院 MSP430 期末考试 题库