MSP430全部程序学习_第1页
MSP430全部程序学习_第2页
MSP430全部程序学习_第3页
MSP430全部程序学习_第4页
MSP430全部程序学习_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、一:基础实验功能:控制IO口实现流水灯的一次点亮并循环下去#includemsp430x14x.hvoid delay(unsigned int a) unsigned int i,j; for(j=a;j0;j-) for(i=80;i0;i-);void main(void) WDTCTL=WDTPW+WDTHOLD; P2DIR|=0XF0; /1111-0000 1表示输出,0表示输入 P2OUT&=0X0F; /0000-1111 输出寄存器 while(1) P2OUT|=BIT4; delay(800); P2OUT|=BIT5; delay(800); P2OUT|=BIT6;

2、 delay(800); P2OUT|=BIT7; delay(800); P2OUT&=0X0F; delay(800); 二:IO口控制(IO口中断)实验功能:利用IO口中断实现按键中断,当按键按下时对应LED等亮#include#pragma vector=PORT2_VECTOR /声明中断源 是IO口2 的中断_interrupt void port2(void);void main(void) WDTCTL=WDTPW+WDTHOLD; _EINT(); P2DIR|=BIT4; P2DIR&=BIT0; P2IE|=BIT0 ; P2IES|=BIT0 ; _BIS_SR(LPM

3、3_bits + GIE); /开总中断 并使CPU进入低功耗模式 while(1);_interrupt void port2(void) if(P2IN&BIT0)=BIT0) P2OUT&=BIT4; else P2OUT|=BIT4; 三:数码管实验功能:编程实现6个数码管依次显示1到6/* _ _ _ _ _ _ f| a |b | | | | | | | | | | |_| |_| |_| |_| |_| |_| e| g |c | | | | | | | | | | |_| |_| |_| |_| |_| |_| d LED6 | LED5 | LED4 | LED3 | LED

4、2 | LED1 | | | | | | P5.7 P5.6 P5.5 P5.4 P5.3 P5.2a-P4.0 b-P4.1 c-P4.2 d-P4.3 e-P4.4 f-P4.5 g-P4.6.-P4.7 段码1选通P5.2-P5.7 位码0导通/ 跳线P14 P15 P5 P6 P7 P8 */#includemsp430x14x.h#define uchar unsigned char unsigned char table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;unsigned char seg=0x7f,0xbf,0xd

5、f,0xef,0xf7,0xfb; void display(uchar i,uchar j) P5OUT=segi; P4OUT=tablej; void main() WDTCTL=WDTPW+WDTHOLD; P5DIR|=(BIT2+BIT3+BIT4+BIT5+BIT6+BIT7); P4DIR|=(BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7); while(1) display(0,1); display(1,2); display(2,3); display(3,4); display(4,5); display(5,6); 四:独立按键综合实

6、验/*/ 描述:/ 有按键中断时,LED5,LED6,LED7,LED8亮与灭;/ / 跳线:P9 P10 P17 *#include #define led5_pout P2DIR|=BIT4 /通讯状态指示灯 设置为输出口#define led5_high P2OUT|=BIT4 /通讯状态指示灯 输出高 点亮指示灯#define led5_low P2OUT&=BIT4 /通讯状态指示灯 输出低 关闭指示灯#define led6_pout P2DIR|=BIT5 /通讯状态指示灯 设置为输出口#define led6_high P2OUT|=BIT5 /通讯状态指示灯 输出高 点亮指示

7、灯#define led6_low P2OUT&=BIT5 /通讯状态指示灯 输出低 关闭指示灯#define led7_pout P2DIR|=BIT6 /通讯状态指示灯 设置为输出口#define led7_high P2OUT|=BIT6 /通讯状态指示灯 输出高 点亮指示灯#define led7_low P2OUT&=BIT6 /通讯状态指示灯 输出低 关闭指示灯#define led8_pout P2DIR|=BIT7 /通讯状态指示灯 设置为输出口#define led8_high P2OUT|=BIT7 /通讯状态指示灯 输出高 点亮指示灯#define led8_low P2

8、OUT&=BIT7 /通讯状态指示灯 输出低 关闭指示灯unsigned char led5,led6,led7,led8,flag;void delay(unsigned int i) while(i-);void IOinit(void) led5_pout; led6_pout; led7_pout; led8_pout; led5_low; led6_low; led7_low; led8_low; P2IE|=BIT0+BIT1+BIT2+BIT3; P2IES|=BIT0+BIT1+BIT2+BIT3;void main(void) WDTCTL=WDTPW+WDTHOLD; IO

9、init(); _EINT(); while(1) switch(flag) case 1: if(led5%2) led5_high; else led5_low; flag=0; break; case 2: if(led6%2)led6_high; else led6_low; flag=0; break; case 3: if(led7%2)led7_high; else led7_low; flag=0; break; case 4: if(led8%2)led8_high; else led8_low; flag=0; break; default: break; _BIS_SR(

10、LPM3_bits+GIE); #pragma vector=PORT2_VECTOR_interrupt void port2 (void) delay(40000);/去抖; if(P2IFG&BIT0)=BIT0) led5+; flag=1; if(P2IFG&BIT1)=BIT1) led6+; flag=2; if(P2IFG&BIT2)=BIT2) led7+; flag=3; if(P2IFG&BIT3)=BIT3) led8+; flag=4; P2IFG=0; _BIC_SR_IRQ(LPM3_bits); 五:行列式键盘实验/*/ P6.7 P6.6 P6.5 +3V/

11、| | | |/ P6.1- /- /- /-R-| / | | | |/ P6.2- /- /- /-R-| / | | | |/ P6.3- /- /- /-R-| / | | | |/ P6.4- /- /- /-R-| / 跳线 P2 P3 */#includemsp430x14x.h#includekey.h void delay(unsigned int i) while(i-);unsigned char key(void) unsigned char x=0XFF; P6DIR=0XE0; P6OUT=0X7F;/ /扫描第一列 if(P6IN&0X02)=0X00) x=12

12、; /x=0; else if(P6IN&0X04)=0) x=11;/x=1; else if(P6IN&0X08)=0) x=10;/x=2; else if(P6IN&0X10)=0) x=9; else P6OUT=0XBF;/ /扫描第二列 if(P6IN&0X02)=0X00) x=8; /x=0; else if(P6IN&0X04)=0) x=7;/x=1; else if(P6IN&0X08)=0) x=6;/x=2; else if(P6IN&0X10)=0) x=5; else P6OUT=0XDF;/扫描第三列 if(P6IN&0X02)=0X00) x=4; /x=0

13、; else if(P6IN&0X04)=0) x=3;/x=1; else if(P6IN&0X08)=0) x=2;/x=2; else if(P6IN&0X10)=0) x=1; return(x);unsigned char get_key(void) unsigned char x,y; if(P6IN&0X1F)!=0X1F) delay(20); if(P6IN&0X1F)!=0X1F) x=key(); if(x!=0xFF) y=x; return y;六:看门狗程序/*/ MSP430F149/ -/ /| XIN|-/ | | |/ -|RST XOUT|-/ | |/

14、| P1.1|-LED/*#include void main(void) WDTCTL = WDT_MDLY_0_064; / Set Watchdog Timer interval to 30ms IE1 |= WDTIE; / Enable WDT interrupt P1DIR |= 0x02; / Set P1.1 to output direction _BIS_SR(LPM0_bits + GIE); / Enter LPM0 w/ interrupt/ Watchdog Timer interrupt service routine#pragma vector=WDT_VECT

15、OR_interrupt void watchdog_timer(void) P1OUT = 0x02; / Toggle P1.1 using exclusive-OR七:TimerA 定时/计数器/*/ MSP-FET430P140 Demo - Timer_A, Toggle P1.1/TA0, Up Mode, 32kHz ACLK/ Description: Toggle P1.1 using hardware TA0 output. Timer_A is configured/ for up mode with CCR0 defining period, TA0 also outp

16、ut on P1.1. In this/ example, CCR0 is loaded with 1000-1 and TA0 will toggle P1.1 at TACLK/1000./ Thus the output frequency on P1.1 will be the TACLK/2000. No CPU or software/ resources required. Normal operating mode is LPM3./ As coded with TACLK = ACLK, P1.1 output frequency = 32768/2000 = 16.384H

17、z./ ACLK = TACLK = 32kHz, MCLK = default DCO 800kHz/ /* External watch crystal installed on XIN XOUT is required for ACLK */ MSP430F149/ -/ /| XIN|-/ | | | 32kHz/ -|RST XOUT|-/ | |/ | P1.1/TA0|- ACLK/2000/ 跳线:J10 Timer_A P0/*#include void main(void) WDTCTL = WDTPW + WDTHOLD; / Stop WDT P1DIR |= 0x02

18、; / P1.1 output 选择P1.1为输出 P1SEL |= 0x02; / P1.1 option select外围模块 CCTL0 = OUTMOD_4; / CCR0 toggle mode 输出为反转模式 CCR0 = 1000-1; TACTL = TASSEL_1 + MC_1; / ACLK, upmode _BIS_SR(LPM3_bits); / Enter LPM3 w/interrupt/#include/typedef unsigned char uchar;/typedef unsigned int uint;/uchar flag=0;/void main(

19、void)/ WDTCTL=WDTPW+WDTHOLD;/ BCSCTL1 &= XT2OFF;/ BCSCTL2 |=SELS+DIVS_3;/ P3DIR |= BIT4;/ TACTL=TASSEL_2+MC_2+TAIE; /_BIS_SR(LPW0_bits+GIE);/Timer_A3 Interrupt Vector( TATV) handler/#pragma vector=TIMERA1_VECTOR/_interrupt void Timer_A(void)/ switch(TAIV)/ / case 2: break;/ case 4: break;/ case 10:

20、P4OUT =BIT5;/ break;/ /Timer A0 interrupt service routine/#pragma vector=TIMERA0_VECTOR/_interrupt void Timer_A (void)/ P4OUT = BIT5;/八:TimerB 定时/计数器/*/ MSP-FET430P140 Demo - Timer_B, Toggle P1.1, CCR0 Up Mode ISR, 32kHz ACLK/ Description: Toggle P1.1 using software and the TB_0 ISR. Timer_B is/ con

21、figured for up mode, thus the timer overflows when TBR counts/ to CCR0. In this example, CCR0 is loaded with 1000-1./ Toggle rate = 32768Hz/(2*1000) = 16.384Hz/ ACLK = TBCLK = 32kHz, MCLK = SMCLK = default DCO 800kHz/ /* An external watch crystal on XIN XOUT is required for ACLK */ MSP430F149/ -/ /|

22、 XIN|-/ | | | 32kHz/ -|RST XOUT|-/ | |/ | P1.1|-LED/ 跳线:J10 Timer_A P0/*#include void main(void) WDTCTL = WDTPW + WDTHOLD; / Stop WDT P1DIR |= 0x02; / Set P1.1 to output direction TBCTL = TBSSEL_1 + TBCLR; / ACLK, clear TBR TBCCTL0 = CCIE; / TRCCR0 interrupt enabled TBCCR0 = 1000-1; TBCTL = TBSSEL_1

23、 + MC_1; / ACLK, upmode _BIS_SR(LPM3_bits + GIE); / Enter LPM3 w/ interrupt/ Timer B0 interrupt service routine#pragma vector=TIMERB0_VECTOR_interrupt void Timer_B (void) P1OUT = 0x02; / Toggle P1.1 using exclusive-OR九:串口通信实验一/*/ MSP-FET430P140 Demo - USART0, / Description: USART0 RX interrupt trigg

24、ers TX Echo. Though not required, / Baud rate divider with 3.2768Mhz XTAL 9600 = 3.2768MHz/9600 = 0003h;/ MSP430F149/ -/ /| XIN|-/ | | | 3.2768MHz/ -|RST XOUT|-/ | |/ | P3.4|-/ | | 9600 / | P3.5|-/ 跳线 串行( P8 P9) 数码管( P14 P15 P5 P6 P7 P8) *#include #include led.h#define uchar unsigned char extern uns

25、igned char num11;extern unsigned char wei7;extern void display(uchar W,uchar sz);uchar aa;/*串口初试化设置*/void uart_org(void) ME1 |= UTXE0 + URXE0; / Enable USART0 TXD/RXD /使能串口 UCTL0 |= CHAR; / 8-bit character /数据格式为8位 UTCTL0 |= SSEL0; / UCLK = ACLK /选择时钟来源 UBR00= 0x03; / 32768/9600 /波特率寄存器低字节 UBR10= 0x

26、00; /波特率寄存器高字节 UMCTL0= 0x4a; /由于波特率计数有余数,填写波特率调整寄存器 P3SEL |= 0x30; / P3.4,5 = USART0 TXD/RXD 定义串口功能引脚 P3DIR |= 0x10; /P3.4口为输出,其余为输人口 UCTL0 &= SWRST; / Initialize USART state machine IE1 |= URXIE0; / Enable USART0 RX interrupt 接受数据能中断/*串口发送字符串程序*/void UartStr(unsigned char *p) *p=0x02; /unsigned cha

27、r str unsigned char i; for (i=0;*p!=0;i+) /准备要发送的数据 /下句UTXIFG0=1则正在发送数据,即不再发送其它数据 while (!(IFG1 & UTXIFG0); / USART0 TX buffer ready?判断缓冲区是否为空 TXBUF0 =*p+; / RXBUF0 to TXBUF0 /发送数据到串口 while (UTCTL0 & TXEPT) = 0); /判断数据是否发送完毕 _NOP();void main() WDTCTL=WDTPW+WDTHOLD; /关闭看门狗 uart_org( ); /串口初始化 _EINT()

28、; /总中断开启 UartStr(请输入abcdef之一!rtn); UartStr(a-1,b-2,c-3,d-4,e-5,f-6rtn); while(1) switch (aa) case 97:display(0,1); break; case 98:display(1,2);break; case 99:display(2,3);break; case 100:display(3,4);break; case 101:display(4,5);break; case 102:display(5,6);break; default:break; _BIS_SR(LPM3_bits+GI

29、E); /初始化完毕,进入睡眠状态 #pragma vector=UART0RX_VECTOR_interrupt void usart0_rx (void) aa=RXBUF0; /接收的数据赋值给 aa _BIC_SR_IRQ(LPM3_bits); /停止休眠十:串口通信实验二/*/ MSP-FET430P140 Demo - USART1, / Description: USART0 RX interrupt triggers TX Echo. Though not required, / Baud rate divider with 3.2768Mhz XTAL 9600 = 3.2

30、768MHz/9600 = 0003h;/ MSP430F149/ -/ /| XIN|-/ | | | 3.2768MHz/ -|RST XOUT|-/ | |/ | P3.6|-/ | | 9600 / | P3.7|-/ 跳线 串行( P8 ) *#include unsigned char send,NR,zs; unsigned char tx_buf20;/*延时*void delay( char i) unsigned char aa=10; while(aa-) while(i-);/*串口初试化设置*/void uart_org(void) ME2 |= UTXE1 + UR

31、XE1; / Enable USART1 TXD/RXD UCTL1 |= CHAR; / 8-bit character UTCTL1 |= SSEL0; / UCLK = ACLK UBR01 = 0x03; / 32768/9600 UBR11 = 0x00; / UMCTL1 = 0x4a; / modulation P3SEL |= 0xC0; UCTL1 &= SWRST; / Initialize USART state machine IE2 |= URXIE1; / Enable USART1 RX interrupt/*发送数据*void Uart_Str(unsigned

32、 char number,unsigned char *p) unsigned char i; for (i=0;inumber;i+)/准备要发送的数据 while (!(IFG2 & UTXIFG1);/ USART0 TX buffer ready? TXBUF1 =*p+; / RXBUF0 to TXBUF0 while (UTCTL1 & TXEPT) = 0); _NOP();/*发送数据*void UartStr(unsigned char *p) unsigned char i; for (i=0;*p!=0;i+)/准备要发送的数据 while (!(IFG2 & UTXI

33、FG1);/ USART0 TX buffer ready? TXBUF1 =*p+; / RXBUF0 to TXBUF0 while (UTCTL1 & TXEPT) = 0); _NOP();/*接收串行数据*/void AddUsData(unsigned char sq0) if(NR0;i-) tx_bufi=0; zs=0; NR=0; _BIS_SR(LPM3_bits+GIE); #pragma vector=UART1RX_VECTOR_interrupt void usart1_rx (void) zs+; AddUsData(RXBUF1); _BIC_SR_IRQ(L

34、PM3_bits); 十一:AD转换实验/*/ MSP-FET430P140 Demo - ADC12, Sample A0, Set P1.0 if A0 0.5*AVcc/ Description: A single sample is made on A0 with reference to AVcc./ Software sets ADC10SC to start sample and conversion - ADC12SC/ automatically cleared at EOC. ADC12 internal oscillator times sample (16x)/ and

35、 conversion. In Mainloop MSP430 waits in LPM0 to save power until ADC12/ conversion complete, ADC12_ISR will force exit from LPM0 in Mainloop on/ reti. If A0 0.5*AVcc, P1.0 set, else reset./ MSP430F149/ -/ /| XIN|-/ | | |/ -|RST XOUT|-/ | |/ Vin-|P6.7/A7 P2 |- LED/*#include #define led5_pout P2DIR|=BIT4 /通讯状态指示灯 设置为输出口#define led5_high P2OUT|=BIT4 /通讯状态指示灯 输

温馨提示

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

评论

0/150

提交评论