山东理工大学msp430考试常用程序缩印版_第1页
山东理工大学msp430考试常用程序缩印版_第2页
山东理工大学msp430考试常用程序缩印版_第3页
全文预览已结束

下载本文档

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

文档简介

1、一 /*利用WDT的定时器模式控制led小灯L1以1s的间隔时间闪灭*/#include io430.hint main( void ) / Stop watchdog timer to prevent time out reset /WDTCTL = WDTPW + WDTHOLD; P6DIR |= BIT2;P6OUT |= BIT2; /关电平转换,P6.2连接了开发板上 /的电平转换芯片的使能端,与实际功能无关 WDTCTL=WDT_ADLY_1000;/设置看门狗ACLK定时器1000ms定时 IE1|=WDTIE;/开看门狗定时器中断 P2DIR|=BIT0; P2OUT|=BI

2、T0; _enable_interrupt();/_EINT();/开总中断 while(1) LPM0;/进入低功耗模式一,CPUOFF return 0;#pragma vector = WDT_VECTOR_interrupt void watchdog_timer() P2OUT=P2OUT;二 /*定时器A增计数模式下,ALK=32768HZ,MCLK=SMCLK=DCOCLK=800KHZ利用定时器溢出中断TAIE实现小灯L1每0.5秒闪灭一次,时钟选择ALK,8分频注意:TTAIE指TAR计数器溢出,从65535 到0的变化,由 TAIFG 引起的,TAIFG 一般进 TIMER

3、A1_VECTOR中断向量;*/#include io430.hint main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P2DIR|=BIT0; P2OUT|=BIT0; _enable_interrupt(); TACTL=TASSEL_1+MC_1+ID_3+TAIE;/选择ACK,增计数模式, /8分频,使能定时器中断 CCR0=4095; /CCIE while(1) LPM0; return 0;#pragma vector=TIMERA1_VECTOR_in

4、terrupt void Timer_A() switch(TAIV) case 2:break; case 4:break; case 10:P2OUT=P2OUT;break; 三 /*定时器A增计数模式下,ALK=32768HZ,MCLK=SMCLK=DCOCLK=800KHZ实现小灯L1每0.5秒闪灭一次,时钟选择SMCLK,使用CCIE中断。注意:CCIE指捕获到相应信号(捕获模式下) ;定时时间到(比较模式下),由CCIFG引起的。CCIFG的话要看用的是哪个定时器,如果是CCR0的话就进TIMERA0_VECTOR,如果是CR1,CCR2则进TIMERA1_VECTOR*/#in

5、clude io430.hint main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P2DIR|=BIT0; P2OUT|=BIT0; _enable_interrupt();/使能中断 TACTL=TASSEL_2+TACLR+MC_1+ID_3;/时钟选择SMCLK,计数器清零,增计数模式,8分频 CCTL0=CCIE;/CCR0中断允许 CCR0=50000; while(1) LPM0; return 0;#pragma vector=TIMERA0_VECTOR

6、_interrupt void Timer_A() P2OUT=P2OUT;四 /*使用CCR0定时中断。CCR0的值是可以改变的,当CCR0增加到0ffffh后自动把它清为0.实验效果为:灯先闪的越来越慢,后突然变得很快,再慢慢变慢。CCR0的值越大定时越长,当CCR0超过65535时会自动清理,使得定时时间很短。而通过高低电平的实时改变也可以用来做相应管脚的PWM输出*/#include io430.hint main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P2DI

7、R|=BIT0; P2OUT|=BIT0; _enable_interrupt(); TACTL=TASSEL_2+TACLR+MC_1+ID_3;/时钟选择SMCLK,计数器清零,增计数模式,8分频 CCTL0=CCIE; CCR0=50000; while(1) LPM0; return 0;#pragma vector=TIMERA0_VECTOR_interrupt void Timer_A() P2OUT=P2OUT; CCR0+=1000;五/*定时器连续计数模式举例:1、在需要65536个时钟周期的定时器应用场合常用连续计数模式。定时器从当前值计数到0FFFFH后又从0开始计数。

8、当定时器从0FFFFH到0时设置标志位TAIFG。2、连续计数模式下,也可以通过改变TACCRx的值,产生独立的时间间隔,例如,可以在相应的比较寄存器TACCRx上加上一个时间差,不断地增加TACCRx的值,使定时器每到一定的时间间隔都能与TACCRx的值相等,从而使中断标志位置位,申请中断。以下代码验证了上面两种情况*/#include io430.hint main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P2DIR=BIT0+BIT1; P2OUT=BIT0+BIT

9、1; TACTL=TASSEL_1+TACLR+MC_2+TAIE;/ACK,连续计数模式 CCTL0=CCIE; CCR0=32768/4; _enable_interrupt(); while(1) LPM0; return 0;#pragma vector=TIMERA0_VECTOR_interrupt void Time_A() P2OUT=BIT0; CCR0+=32768/4;#pragma vector=TIMERA1_VECTOR_interrupt void Time_a() switch(TAIV) case 2:break; case 4:break; case 10:

10、P2OUT=BIT1;break; 六 /*任务要求:利用定时器A产生4路周期信号,周期分别是4s,2s,1s和0.25s,四路周期信号分别从P2.0-P2.3口输出。*/#include io430.hint main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P2DIR=BIT0+BIT1+BIT2+BIT3; P2OUT=BIT0+BIT1+BIT2+BIT3; TACTL=TASSEL_1+MC_2+TAIE;/ACK,连续计数模式,定时器溢出中断 CCTL0=CC

11、IE; CCTL1=CCIE; CCTL2=CCIE; CCR0=32768/8; CCR1=32768/2; CCR2=32768; _enable_interrupt(); while(1) LPM0; return 0;#pragma vector=TIMERA0_VECTOR_interrupt void Timer_A0() P2OUT=BIT3; CCR0+=32768/8;#pragma vector=TIMERA1_VECTOR_interrupt void Timer_A1() switch(TAIV) case 2: CCR1+=32768/2; P2OUT=BIT2; b

12、reak; case 4: CCR2+=32768; P2OUT=BIT1; break; case 10: P2OUT=BIT0; break; 七 四乘四按键#includeio430.h#defineucharunsignedchar#defineunitunsignedintvoiddelay(unittime)uniti;while(time-)for(i=100;i0;i-1);ucharkeyscan(void)ucharKeyNum;P1OUT=0X0F;if(P1IN&0X0F)!=0X0F)delay(100);if(P1IN&0X0F)!=0X0F)P1OUT=0XE0;

13、/判断哪列被拉低if(P1IN&0X0F)=0X0E)/判断哪行被拉低KeyNum=0;if(P1IN&0X0F)=0X0d)KeyNum=1;if(P1IN&0X0F)=0X0b)KeyNum=2;if(P1IN&0X0F)=0X07)KeyNum=3;P1OUT=0XD0;if(P1IN&0X0F)=0X0E)KeyNum=4;if(P1IN&0X0F)=0X0d)KeyNum=5;if(P1IN&0X0F)=0X0b)KeyNum=6;if(P1IN&0X0F)=0X07)KeyNum=7;P1OUT=0XB0;if(P1IN&0X0F)=0X0E)KeyNum=8;if(P1IN&0X

14、0F)=0X0d)KeyNum=9;if(P1IN&0X0F)=0X0b)KeyNum=10;if(P1IN&0X0F)=0X07)KeyNum=11;P1OUT=0X70;if(P1IN&0X0F)=0X0E)KeyNum=12;if(P1IN&0X0F)=0X0d)KeyNum=13;if(P1IN&0X0F)=0X0b)KeyNum=14;if(P1IN&0X0F)=0X07)KeyNum=15;elseKeyNum=KeyNum;returnKeyNum;intmain(void)/StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+W

15、DTHOLD;P2SEL=0X00;P2DIR=0XFF;P1SEL=0X00;P1DIR=0XF0;while(1)P2OUT=keyscan();八 0-99#include io430.h#define uchar unsigned char #define uint unsigned int#define key (P1IN&0X01)uint keysign=0; void delay(int a) int i,j;for(i=0;ia;i+)for(j=0;j200;j+);void keyscan() if(key!=1) delay(10); if(key!=1) if(key

16、sign=1) keysign=0; else keysign=1; delay(1000); uchar table=0x3F,0X06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x6f,0x7f;uchar table2=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef; int main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; int a,b,c; P4DIR=0xff; P5DIR=BIT5;

17、P6DIR=BIT6; while(1) for(a=0;a10;a+) for(b=0;b10;b+) for(c=0;c10;c+) P4OUT=tablec; P6OUT|=BIT6; P6OUT=BIT6; P5OUT|=BIT5; P5OUT=BIT5; P4OUT=0xfb; P5OUT=BIT5; delay(20); P4OUT=table2b; P6OUT|=BIT6; P6OUT=BIT6; P5OUT|=BIT5; P5OUT=BIT5; P4OUT=0xfd; P5OUT=BIT5; delay(20); P4OUT=tablea; P6OUT|=BIT6; P6OUT

18、=BIT6; P5OUT|=BIT5; P5OUT=BIT5; P4OUT=0xfe; P5OUT=BIT5; delay(20);keyscan();if(a=9&b=9)break; return 0; 九 数码管与定时器测试#include io430.h#define unit unsinged int#define uchar unsigned char#define wei_h P5OUT|= BIT5#define wei_l P5OUT&= BIT5#define duan_l P6OUT &= BIT6#define duan_h P6OUT |= BIT6unit i=0;

19、unit a=0;void key(unit i) P4OUT=YOUi; duan_h;duan_l; P4OUT=0XFD; vai_h;vai_l; delay(3);void key1(unit a) P4OUT=WUa; duan_h;duan_l; P4OUT=0XFE;uchar WU=0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F;uchar YOU=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;int main( void ) / Stop watchdog timer

20、to prevent time out reset WDTCTL = WDTPW + WDTHOLD; TACTL=TASSEL_2+ID_3+MC_1+TACLR; CCTL0=CCIE; CCR0=50000; P4DIR=0XFF;P5DIR|=BIT5;P6DIR|=BIT6;_enable_interrupt();while(1) LPM0; return 0;#pragma vector=TIMERA0_VECTOR_interrupt void timera()int c; for(c=0;c10;c+) P4OUT=WUc; duan_h;duan_l; P4OUT=0XFB;

21、 vai_h;vai_l; delay(3); key(i); key1(a); i+; a+;十数码管#include io430.h#define uchar unsigned char#define uint unsigned int#define duan_h P6OUT|=BIT6#define duan_l P6OUT&=BIT6#define weixuan_h P5OUT|=BIT5#define weixuan_l P5OUT&=BIT5/共阴级数码管字形代码表uchar table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0

22、x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00;void delay(uint time);int main( void ) uchar i; / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P4DIR=0XFF; P5DIR=0XFF; P6DIR=0XFF; while(1) for(i=0;i=7;i+) P4OUT=tablei; duan_h; duan_l; P4OUT=(BIT0i); weixuan_h; weixuan_l; delay(200);

23、 return 0;void delay(uint time) uint a,b; for(a=0;a=time;a+) for(b=0;b=300;b+);十一定时器中断#include io430.hint main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P2DIR|=BIT0;P2DIR|=BIT1;P2OUT|=BIT0;P2OUT|=BIT1;_enable_interrupt();TACTL=TASSEL_2 +ID_3+MC_2+TACLR+TAIE;CC

24、TL0=CCIE;CCTL1=CCIE;CCR0=10000;CCR1=5000;while(1) LPM0; return 0;#pragma vector=TIMERA0_VECTOR_interrupt void timea() P2OUT=BIT0; CCR0+=10000;#pragma vector=TIMERA1_VECTOR_interrupt void timeb() switch(TAIV) case 2: P2OUT=BIT1; CCR1+=5000;break;case 4:break;case 10:break; 十二串口发送/*程序功能:MCU不停向PC机发送数据,

25、在屏幕上显示0127对应 的ASCII字符-通信格式:N.8.1, 2400-测试说明:打开串口调试精灵,正确设置通信格式,观察屏幕*/#include typedef unsigned char uchar;typedef unsigned int uint;void Delays(void);void PutString(uchar *ptr);/*主函数*/void main(void) uchar *tishi = MCU sends 0127 to PC and the n screen will display their corresponding n ASCII code as

26、 follows:; uchar value = 0; /*下面六行程序关闭所有的IO口*/ P1DIR = 0XFF;P1OUT = 0XFF; P2DIR = 0XFF;P2OUT = 0XFF; P3DIR = 0XFF;P3OUT = 0XFF; P4DIR = 0XFF;P4OUT = 0XFF; P5DIR = 0XFF;P5OUT = 0XFF; P6DIR = 0XFF;P6OUT = 0XFF; WDTCTL = WDTPW + WDTHOLD; / 关狗 P6DIR |= BIT2;P6OUT |= BIT2; / 关电平转换 P3SEL |= 0x30; / P3.4,5

27、选择为UART收发端口 ME1 |= UTXE0 + URXE0; / 使能USART0收发 UCTL0 |= CHAR; / 8-bit character UTCTL0 |= SSEL0; / UCLK = ACLK UBR00 = 0x0D; / 32k/2400 - 13.65 UBR10 = 0x00; / UMCTL0 = 0x6B; / Modulation UCTL0 &= SWRST; / 初始化UART0状态机 IE1 |= URXIE0; / 使能接收中断 _EINT(); PutString(tishi); while(1) while (!(IFG1 & UTXIFG

28、0); TXBUF0 = value+; value &= 0x7f; / 保证value的数值小于128 while (!(IFG1 & UTXIFG0); TXBUF0 = n; Delays(); /*函数名称:PutSting功 能:向PC机发送字符串参 数:无返回值 :无*/void PutString(uchar *ptr) while(*ptr != 0) while (!(IFG1 & UTXIFG0); / TX缓存空闲? TXBUF0 = *ptr+; / 发送数据 while (!(IFG1 & UTXIFG0); TXBUF0 = n;/*函数名称:Delays功 能:

29、延时一会参 数:无返回值 :无*/void Delays(void) uchar i=20; uint j; while(i-) j=2000; while(j-); 十三串口回发/*程序功能:接收来自PC机的字符,然后重新发送给PC机-通信格式:N.8.1, 9600 无校验,8个数据位,1个停止位,波特率9600-测试说明:打开串口调试助手,正确设置通信格式,向学习板 发送一个字符,观察是否收到回发的字符,以及是否 正确*/#include /*主函数*/void main(void) /*下面六行程序关闭所有的IO口*/ P1DIR = 0XFF;P1OUT = 0XFF; P2DIR

30、= 0XFF;P2OUT = 0XFF; P3DIR = 0XFF;P3OUT = 0XFF; P4DIR = 0XFF;P4OUT = 0XFF; P5DIR = 0XFF;P5OUT = 0XFF; P6DIR = 0XFF;P6OUT = 0XFF; WDTCTL = WDTPW + WDTHOLD; / 关闭看门狗 P6DIR |= BIT2;P6OUT |= BIT2; /关闭电平转换 P3SEL |= 0x30; / 选择P3.4和P3.5做UART通信端口 ME1 |= UTXE0 + URXE0; / 使能USART0的发送和接受 UCTL0 |= CHAR; / 选择8位字符

31、 UTCTL0 |= SSEL0; / UCLK = ACLK UBR00 = 0x03; / 波特率9600 UBR10 = 0x00; / UMCTL0 = 0x4A; / Modulation UCTL0 &= SWRST; / 初始化UART状态机 IE1 |= URXIE0; / 使能USART0的接收中断 while(1) _EINT(); /打开全局中断 LPM1; /进入LPM1模式 while (!(IFG1 & UTXIFG0); /等待以前的字符发送完毕 TXBUF0 = RXBUF0; /将收到的字符发送出去 /*函数名称:UART0_RXISR功 能:UART0的接收

32、中断服务函数,在这里唤醒 CPU,使它退出低功耗模式参 数:无返回值 :无*/#pragma vector = UART0RX_VECTOR_interrupt void UART0_RXISR(void) LPM1_EXIT; /退出低功耗模式十四串口键盘/*程序功能:MCU通过串口向PC机发送4X4键盘的键值-通信格式:N.8.1, 9600-测试说明:打开串口调试助手,正确设置通信格式,按动4X4 键盘观察屏幕显示的按键键值。*/#include #include keypad.h#include keypad.C/引用外部变量的声明extern unsigned char key_Pr

33、essed; extern unsigned char key_val; extern unsigned char key_Flag; void PutString(uchar *ptr);void PutChar(uchar zifu);/*主函数*/void main(void) /*下面六行程序关闭所有的IO口*/ P1DIR = 0XFF;P1OUT = 0XFF; P2DIR = 0XFF;P2OUT = 0XFF; P3DIR = 0XFF;P3OUT = 0XFF; P4DIR = 0XFF;P4OUT = 0XFF; P5DIR = 0XFF;P5OUT = 0XFF; P6D

34、IR = 0XFF;P6OUT = 0XFF; uchar *tishi = This Keys ID is:; P6DIR |= BIT2;P6OUT |= BIT2; /关闭电平转换 WDTCTL = WDTPW + WDTHOLD; / Stop WDT P3SEL |= 0x30; / P3.4,5 = USART0 TXD/RXD ME1 |= UTXE0; / Enable USART0 TXD/RXD UCTL0 |= CHAR; / 8-bit character UTCTL0 |= SSEL0; / UCLK = ACLK UBR00 = 0x03; / 32k/9600 -

35、 3.41 UBR10 = 0x00; / UMCTL0 = 0x4A; / Modulation UCTL0 &= SWRST; / Initialize USART state machine Init_Keypad(); /初始化键盘端口 while(1) Key_Event(); if(key_Flag = 1) key_Flag = 0; PutString(tishi); PutChar(key_val); /*函数名称:PutSting功 能:向PC机发送字符串参 数:ptr-指向发送字符串的指针返回值 :无*/void PutString(uchar *ptr) while(*

36、ptr != 0) while (!(IFG1 & UTXIFG0); / TX缓存空闲? TXBUF0 = *ptr+; / 发送数据 while (!(IFG1 & UTXIFG0); TXBUF0 = n;/*函数名称:PutChar功 能:向PC机发送一个字符对应的ASCII码参 数:zifu-发送的字符返回值 :无*/void PutChar(uchar zifu) while (!(IFG1 & UTXIFG0); if(zifu 9) /发送键值116对应的ASCII码 TXBUF0 = 0x30 + zifu/10; while (!(IFG1 & UTXIFG0); TXBU

37、F0 = 0x30 + zifu%10; else TXBUF0 = 0x30 + zifu; while (!(IFG1 & UTXIFG0); TXBUF0 = n; /发送回车字符十五 LED#include io430.hvoid delay(unsigned int time);/unsigned int t;int main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P2SEL=0X00;/P2口为基本IO/P2SEL=BIT0;P2SEL=0XFE; P2DI

38、R=0XFF;/P2口为输出口 P2OUT=0XFF;/初始化小灯为全灭 while(1) P2OUT=0XFE;/点亮 delay(200); P2OUT=0XFF;/熄灭 delay(200); return 0;void delay(unsigned int time) unsigned int a,b; for(a=0;atime;a+) for(b=0;b300;b+);十六/*捕获/比较模块之捕获举例:ACLK=32768Hz,MCLK=SMCLK=DCOCLK=800KHz,经过8分频后作为定时器TA的时钟源,定时器TA工作在连续计数模式。待捕获方波信号由软件产生,经P3.0输出

39、,输出信号同时接入CCI0A(P1.1)和CCI1A(P1.2),由CCR0确定信号占空比,由CCR1获取信号周期*/#include io430.h#define uint unsigned int#define uchar unsigned char uint lastccr0,lastccr1;uint cycle=0;uint Duty_Ratio=0;int main( void ) uint i; / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; TACTL=TASSEL_1+MC_2+TACLR;/ACLK,连续计数模式,计数器清空 CCTL0=CM_3+CCIS_0+SCS+CAP+CCIE;/选择捕获模式,上升沿和下降沿 /都捕获,异步捕

温馨提示

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

评论

0/150

提交评论