中国石油大学胜利学院MSP430期末考试题库_第1页
中国石油大学胜利学院MSP430期末考试题库_第2页
中国石油大学胜利学院MSP430期末考试题库_第3页
中国石油大学胜利学院MSP430期末考试题库_第4页
中国石油大学胜利学院MSP430期末考试题库_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MSP430实验一1. 熟悉开发环境,掌握USB下载软件的方法。2. 用汇编语言实现:P2.0-P2.7依次点亮(参考开发板原理图)要求先软件仿真调试程序,无误后再下载到开发板运行3. 用C语言实现上述功能,其它要求同上。汇编语言参考程序清单:#include <msp430F149.h> ;包含msp430.h文件 ; NAME main ;模块名称定义 ;PUBLIC main ; ORG 0FFFEh ;中断向量表复位向量地址 DC16 init ;存放用户程序入口地址,复位后开始执行 RSEG DATA16_C ;在ROM中存放LED显示值LEDdata DB 01h,02

2、h,04h,08h,10h,20h,40h,80h RSEG CSTACK ;定义堆栈段 RSEG CODE定义代码段init: MOV #SFE(CSTACK), SP ;初始化堆栈指针main: NOP ; main program 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,

3、 R5 ;循环控制次数next: MOV.b R4+, &P2OUT ;取表中的某一种状态输出 CALL #delay ;延时 DEC R5 ;判断8种状态是否输出完 JNZ next ;否,继续 JMP again ;重新从表头开始delay: PUSH SR ;延时 mov #20,R7WAIT1: MOV #0FFFFh,R6 ;A123: DEC R6 JNZ A123 dec R7 JNZ WAIT1 POP SR RET END ; C 语言参考程序:#include "msp430f149.h" void delay(); int main( void

4、 ) unsigned char LEDdata =1, 2, 4,8,0x10,0x20,0x40,0x80; unsigned int i; 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=LEDdatai; / delay(); /调用延时子程void delay() unsigned int i; /定义函数变量for (i=0;i&l

5、t;0xffff;i+); /延时MSP430实验2P1.0作为中断输入端,下降沿触发,当有中断请求时取反P2.0状态。P1.0的硬件接线参考原理图。1、用汇编语言实现(参考程序如下)#include "msp430.h"NAME mainPUBLIC mainORG 0FFFEhDC16 init ;set reset vector to 'init' labelORG 0FFE0h+PORT1_VECTOR ;中断向量表首地址+端口1中断偏址DC16 intP1 ;set port1 vector to intP1 labelRSEG CSTACK ;定

6、义堆栈段RSEG CODE ;代码段init: MOV #SFE(CSTACK), SP ;初始化SPmain: NOPMOV.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输出初值为0BIC b #BIT0, &P1SEL ;置P1.0作为基本I/O端口BIC.b #BIT0, &

7、;P1DIR ;置P1.0为输入BIS.b #BIT0, &P1IES ;置P1.0下降沿作中断源BIC.b #BIT0, &P1IFG ;清P1.0中断标志BIS.b #BIT0, &P1IE ;打开P1.0中断允许EINT ;允许可屏蔽中断GIE=1JMP $ ;主程循环intP1: BIT.b #BIT0, &P1IFG ;判断是否是P1IFG.0中断标志JZ exit ;不是则跳转XOR.b #BIT0, &P2OUT ;对P2.0取反BIC.b #BIT0, &P1IFG ;清P1.0中断标志exit: RETIEND2.用C语言实现(

8、参考程序如下)#include "msp430x14x.h"int main( void ) WDTCTL = WDTPW + WDTHOLD; /关闭看门狗_DINT(); /禁止可屏蔽中断GIE=0P1IE |=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下降沿

9、作中断源 P1IFG=0X00; /清P1.0中断标志 P1IE|=BIT0; /打开P1.0中断允许_EINT(); /允许可屏蔽中断GIE=1while(1) ; /主程循环#pragma vector=PORT1_VECTOR /置P1中断向量_interrupt void port_int(void) /中断子程 if (P1IFG=BIT0) /判断是否是P1IFG.0中断标志P2OUT =BIT0; /对P2.0取反P1IFG &=BIT0; /清P1.0中断标志 修改程序,使P1.0为上升沿触发中断,观察程序运行的差异。串行口实验#include <msp430x1

10、4x.h>void main(void) /关电平转换 WDTCTL = WDTPW + WDTHOLD; / Stop WDT P3SEL |= 0x30; / P3.4,5 = USART0 TXD/RXD ME1 |= UTXE0 + URXE0; / Enable USART0 TXD/RXD UCTL0 |= CHAR; / 8-bit character UTCTL0 |= SSEL0; / UCLK = ACLK UBR00 = 0x0D; / 32k/2400 - 13.65 UBR10 = 0x00; / UMCTL0 = 0x6B; / Modulation UCTL

11、0 &= SWRST; / Initialize USART state machine IE1 |= URXIE0; / Enable USART0 RX interrupt/ Mainloop for (;) _BIS_SR(LPM3_bits + GIE); / Enter LPM3 w/interrupt while (!(IFG1 & UTXIFG0); / USART0 TX buffer ready? TXBUF0 = RXBUF0; / RXBUF0 to TXBUF0/ UART0 RX ISR will for exit from LPM3 in Mainl

12、oop#pragma vector=UART0RX_VECTOR_interrupt void usart0_rx (void) _BIC_SR_IRQ(LPM3_bits); / Clear LPM3 bits from 0(SR)实验3系统时钟部分:注:DCOCTL:地址为056H,PUC后的值为060HBCSTCL1:地址为057H,PUC后的值为084HBCSTCL2 :地址为058H,PUC后值为00H怎样改变系统时钟? 因为PUC信号之后,DCOCLK被自动选做MCLK时钟信号,根据需要,MCLK的时钟源可以另外设置为LFXT1或者XT2.设置顺序如下:1.复位OscOff;2.清

13、除OFIFG;3.延时等待至少50us;4.再次检查OFIFG,如果仍然置位,则重复3,4步骤,直到OFIFG=0为止。MSP430x14x及时钟模块有关的几个引脚引脚名称引脚序号第二功能P1.4/SMCLK12SMCLK信号输出P2.0/ACLK20ACLK信号输出P5.4/MCLK48MCLK信号输出P5.5/SMCLK49SMCLK信号输出P5.6/ACLK50ACLK信号输出XIN8晶体振荡器XT1的输入口XOUT/TCLK9晶体振荡器XT1的输出口或测试时钟输入口XT2IN53晶体振荡器XT2的输入口XT2OUT52晶体振荡器XT2的输出口P2.5/Rosc25外界一电阻以确定DCO

14、的工作频率基础时钟模块试验程序1: 设MCLK=XT2,SMCLK=DCOCLK,将MCLK由5.4输出程序如下:#include <msp430x14x.h>void main(void) unsigned int i; WDTCTL = WDTPW + WDTHOLD; /停止看门狗 P5DIR |= 0X10; /设置P5.4为输出 P5SEL |= 0X10; /设置P5.4为MCLK输出 BCSCTL1 &= XT2OFF; /设置XT2为有效 do IFG1 &= OFIFG; /清除振荡器失效标志 for(i = 0xFF;i>0;i-); /稳

15、定时间 while(IFG1 & OFIFG) != 0); /如果振荡器失效标志存在则继续循环。 BCSCTL2 |= SELM1; /设置MCLK = XT2 for(;);基础时钟模块试验程序2: 设置ACLK=MCLK=LFXT1=LF,将MCLK通过P5.4输出。#include <msp430x14x.h>void main(void) unsigned int i; WDTCTL = WDTPW + WDTHOLD; /停止看门狗 / P5DIR |= 0X10; /设置P5.4为输出 P5SEL |= 0X10; /设置P5.4为MCLK输出 BCSCTL1

16、 &= XTS; /设置LFXT1为低速模式 do IFG1 &= OFIFG; /清除振荡器失效标志 for(i = 0xFF;i>0;i-); /稳定时间 while(IFG1 & OFIFG) != 0); /如果振荡器失效标志存在则继续循环 BCSCTL2 |= SELM1+SELM0; /设置MCLK=LFXT1 for(;);低功耗部分:试验程序1:#include <msp430x14x.h>void main(void) BCSCTL1 |= DIVA_2; / ACLK/4 WDTCTL = WDT_ADLY_1000; / WDT

17、1s/4 interval timer IE1 |= WDTIE; / Enable WDT interrupt P3DIR |= BIT1; / Set P3.1 to output direction P3OUT &= BIT1; / Set P3.1 to 0 while(1) int i; _BIS_SR(LPM3_bits + GIE); / Enter LPM3 P3OUT |=BIT1; / Set P3.1 LED on for (i = 5000; i>0; i-); / Delay P3OUT &= BIT1; / Clear P3.1 LED off

18、#pragma vector=WDT_VECTOR_interrupt void watchdog_timer (void) _BIC_SR_IRQ(LPM3_bits) / Clear LPM3 bits from 0(SR)看门狗定时器:看门狗定时器实验程序:# include <msp430x14x.h>void main(void)WDTCTL = WDT_MDLY_32; / 定时周期为32msIE1 |= WDTIE; / 使能WDT中断 P1DIR |= 0x01; / P1.0输出 _EINT(); / 系统中断允许 for (;) _BIS_SR(CPUOFF);

19、 / 进入 LPM0 _NOP(); / 看门狗中断服务子程序#pragma vector= WDT_VECTOR_interrupt void watchdog_timer (void) P1OUT = 0x01; / P1.0取反实验5 (定时器部分)相关寄存器一、1、分析给定程序,在重要语句后加上注释,2、改变定时器的时钟源,计算相关引脚的翻转频率3、改变定时器的计数模式,(增计数或连续计数)4、开放捕获比较模块1和模块2的中断,要求模块1的翻转频率为模块0的一倍;模块2是模块1的一倍。5、若定时器选用辅助时钟,计数器采用增模式计数,利用模块0的中断使P20的翻转频率为100HZ. #i

20、nclude <msp430x14x.h>void main(void) WDTCTL = WDTPW + WDTHOLD; / P6DIR |= BIT2;P6OUT |= BIT2; /关电平转换 P2DIR |= BIT0+BIT7; / CCTL0 = CCIE; / CCR0 interrupt enabled CCR0 = 33; / TACTL = TASSEL_1 + MC_1; / _BIS_SR(LPM0_bits + GIE); / / Timer A0 interrupt service routine#pragma vector=TIMERA0_VECTO

21、R /_interrupt void Timer_A (void) P2OUT = BIT0; / CCR0 += 32768; / #pragma vector=TIMERA1_VECTOR /_interrupt void Timer_A1 (void) switch(TAIV) case 0x02:break; / case 0x04:break; / case 10:P2OUT=BIT7; / break;二、实验要求:1、示波器分别连接P1.2和P1.3,改变CCR1和CCR2观察占空比的变化。2、改变CCR0的值,观察PWM的周期或频率的变化。3、修改如下程序,使PWM的频率为10

22、0HZ,占空比为50.#include <msp430x14x.h>Void main(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,用示波器测

23、量验证捕获信号的周期。实验要求:用导线连接P2.0P1.1,示波器接在P2.7端口。 改变辅助时钟的频率被测信号的周期。#include <msp430x14x.h>unsigned int new_cap=0;unsigned int old_cap=0;unsigned int cap_diff=0;unsigned int diff_array16;unsigned int capture_array16;unsigned char index=0;unsigned char count=0;void main(void) volatile unsigned int i;WD

24、TCTL=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);#pragma vector=TIMERA0_VECTOR_interrupt void timera0(void) ne

25、w_cap=TACCR0;cap_diff=new_cap-old_cap;diff_arrayindex=cap_diff;capture_arrayindex+=new_cap;P2OUT=BIT7;if(index=16)index=0;P1OUT=0X01;old_cap=new_cap;count+; if(count=32)count=0;_NOP();试验程序:1、/ MSP-FET430P140 Demo - USART0, Ultra-Low Pwr UART 2400 Echo ISR, 32kHz ACLK/ Description: Echo a received ch

26、aracter, RX ISR used. In the Mainloop UART0/ is made ready to receive one character with interrupt active. The Mainloop/ waits in LPM3. The UART0 ISR forces the Mainloop to exit LPM3 after/ receiving one character which echo's back the received character./ ACLK = UCLK0 = LFXT1 = 32768, MCLK = SM

27、CLK = DCO 800k/ Baud rate divider with 32768hz XTAL 2400 = 32768Hz/2400 = 13.65 (000Dh)/ /* An external watch crystal is required on XIN XOUT for ACLK */ MSP430F149/ /| XIN|-/ | | | 32kHz/ -|RST XOUT|-/ | P3.4|->/ | | 2400 - 8N1/ | P3.5|<-/ M. Buccini/ Texas Instruments Inc./ Feb 2005/ Built w

28、ith IAR Embedded Workbench Version: 3.21A#include <msp430x14x.h>void main(void) P6DIR |= BIT2;P6OUT |= BIT2; /关电平转换 WDTCTL = WDTPW + WDTHOLD; / Stop WDT P3SEL |= 0x30; / P3.4,5 = USART0 TXD/RXD ME1 |= UTXE0 + URXE0; / Enable USART0 TXD/RXD UCTL0 |= CHAR; / 8-bit character UTCTL0 |= SSEL0; / UC

29、LK = ACLK UBR00 = 0x0D; / 32k/2400 - 13.65 UBR10 = 0x00; / UMCTL0 = 0x6B; / Modulation UCTL0 &= SWRST; / Initialize USART state machine IE1 |= URXIE0; / Enable USART0 RX interrupt/ Mainloop for (;) _BIS_SR(LPM3_bits + GIE); / Enter LPM3 w/interrupt while (!(IFG1 & UTXIFG0); / USART0 TX buffe

30、r ready? TXBUF0 = RXBUF0; / RXBUF0 to TXBUF0/ UART0 RX ISR will for exit from LPM3 in Mainloop#pragma vector=UART0RX_VECTOR_interrupt void usart0_rx (void) _BIC_SR_IRQ(LPM3_bits); / Clear LPM3 bits from 0(SR)2、/ MSP-FET430P140 Demo - USART0, Ultra-Low Pwr UART 9600 Echo ISR, 32kHz ACLK/ Description:

31、 Echo a received character, RX ISR used. In the Mainloop UART0/ is made ready to receive one character with interrupt active. The Mainloop/ waits in LPM3. The UART0 ISR forces the Mainloop to exit LPM3 after/ receiving one character which echo's back the received character./ ACLK = UCLK0 = LFXT1

32、 = 32768, MCLK = SMCLK = DCO 800k/ Baud rate divider with 32768hz XTAL 9600 = 32768Hz/9600 = 3.41 (0003h 4Ah )/ /* An external watch crystal is required on XIN XOUT for ACLK */ MSP430F149/ /| XIN|-/ | | | 32kHz/ -|RST XOUT|-/ | P3.4|->/ | | 9600 - 8N1/ | P3.5|<-/ M. Buccini/ Texas Instruments

33、Inc./ Feb 2005/ Built with IAR Embedded Workbench Version: 3.21A#include <msp430x14x.h>void main(void) P6DIR |= BIT2;P6OUT |= BIT2; /关电平转换 WDTCTL = WDTPW + WDTHOLD; / Stop WDT P3SEL |= 0x30; / P3.4,5 = USART0 TXD/RXD ME1 |= UTXE0 + URXE0; / Enable USART0 TXD/RXD UCTL0 |= CHAR; / 8-bit characte

34、r UTCTL0 |= SSEL0; / UCLK = ACLK UBR00 = 0x03; / 32k/9600 - 3.41 UBR10 = 0x00; / UMCTL0 = 0x4A; / Modulation UCTL0 &= SWRST; / Initialize USART state machine IE1 |= URXIE0; / Enable USART0 RX interrupt/ Mainloop for (;) _BIS_SR(LPM3_bits + GIE); / Enter LPM3 w/interrupt while (!(IFG1 & UTXIF

35、G0); / USART0 TX buffer ready? TXBUF0 = RXBUF0; / RXBUF0 to TXBUF0/ UART0 RX ISR will for exit from LPM3 in Mainloop#pragma vector=UART0RX_VECTOR_interrupt void usart0_rx (void) _BIC_SR_IRQ(LPM3_bits); / Clear LPM3 bits from 0(SR)3、/ MSP-FET430P140 Demo - USART0, Ultra-Low Pwr UART 9600 Echo ISR, 8M

36、Hz SMCLK /*#include <msp430x14x.h>void main(void) volatile unsigned int i; P6DIR |= BIT2;P6OUT |= BIT2; /关电平转换 P3SEL |= 0x30; / P3.4,5 = USART0 TXD/RXD WDTCTL = WDTPW + WDTHOLD; / Stop WDT BCSCTL1 &= XT2OFF; / XT2on do IFG1 &= OFIFG; / Clear OSCFault flag for (i = 0xFF; i > 0; i-);

37、/ Time for flag to set while (IFG1 & OFIFG); / OSCFault flag still set? BCSCTL2 |= SELM_2 + SELS; / MCLK = SMCLK = XT2 (safe) ME1 |= UTXE0 + URXE0; / Enable USART0 TXD/RXD UCTL0 |= CHAR; / 8-bit character UTCTL0 |= SSEL1; / UCLK = SMCLK UBR00 = 0x41; / 8Mhz/19200 417 UBR10 = 0x03; / UMCTL0 = 0x0

38、0; / no modulation UCTL0 &= SWRST; / Initialize USART state machine IE1 |= URXIE0; / Enable USART0 RX interrupt _BIS_SR(LPM0_bits + GIE); / Enter LPM0 w/ interrupt#pragma vector=UART0RX_VECTOR_interrupt void usart0_rx (void) while (!(IFG1 & UTXIFG0); / USART0 TX buffer ready? TXBUF0 = RXBUF0

39、; / RXBUF0 to TXBUF0在程序3的基础上修改程序,实现自收自发,接受的数据送P2口显示。#include <msp430x14x.h>typedef unsigned int uint; uint j;void main(void) P6DIR |= BIT2;P6OUT |= BIT2; /关电平转换 WDTCTL = WDTPW + WDTHOLD; / Stop WDT P3SEL |= 0x30; / P3.4,5 = USART0 TXD/RXD P2DIR=0XFF; ME1 |= UTXE0 + URXE0; / Enable USART0 TXD/R

40、XD UCTL0 |= CHAR+LISTEN; / 8-bit character UTCTL0 |= SSEL0; / UCLK = ACLK UBR00 = 0x03; / 32k/9600 - 3.41 UBR10 = 0x00; / UMCTL0 = 0x4A; / Modulation UCTL0 &= SWRST; / Initialize USART state machine IE1 |= URXIE0; / Enable USART0 RX interrupt TXBUF0 = 0X00;/ Mainloop for (;) _BIS_SR(LPM3_bits +

41、GIE); / Enter LPM3 w/interrupt while (!(IFG1 & UTXIFG0); / USART0 TX buffer ready? j =RXBUF0-1; P2OUT = j; / RXBUF0 to TXBUF0 for(uint i=0;i<=5000;i+); for(uint i=0;i<=5000;i+); for(uint i=0;i<=5000;i+); for(uint i=0;i<=5000;i+); for(uint i=0;i<=5000;i+); for(uint i=0;i<=5000;i

42、+); for(uint i=0;i<=5000;i+); for(uint i=0;i<=5000;i+); TXBUF0=j;/ UART0 RX ISR will for exit from LPM3 in Mainloop#pragma vector=UART0RX_VECTOR_interrupt void usart0_rx (void) _BIC_SR_IRQ(LPM3_bits); / Clear LPM3 bits from 0(SR)#include <msp430x14x.h>void main(void) WDTCTL = WDTPW + WDT

43、HOLD; / Stop WDT P6DIR |= BIT2;P6OUT |= BIT2; /关闭电平转换 ADC12CTL0 = SHT0_2 + ADC12ON; / Set sampling time, turn on ADC12 ADC12CTL1 = SHP; / Use sampling timer ADC12IE = 0x01; / Enable interrupt ADC12CTL0 |= ENC; / Conversion enabled P6SEL |= 0x01; / P6.0 ADC option select P2DIR |= BIT4; / P2.4 output

44、for (;) ADC12CTL0 |= ADC12SC; / Sampling open _BIS_SR(CPUOFF + GIE); / LPM0, ADC12_ISR will force exit/ ADC12 interrupt service routine#pragma vector=ADC_VECTOR_interrupt void ADC12_ISR (void) if (ADC12MEM0 < 0x7FF) P2OUT &= BIT4; / Clear P2.4 LED off else P2OUT |= BIT4; / Set P2.4 LED on _BIC_SR_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论