山東理工大學msp430考試常用程序縮印版3頁_第1頁
山東理工大學msp430考試常用程序縮印版3頁_第2頁
山東理工大學msp430考試常用程序縮印版3頁_第3頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、一 /*利用WDT的定時器模式控制led小燈L1以1s的間隔時間閃滅*/#include "io430.h"int main( void ) / Stop watchdog timer to prevent time out reset /WDTCTL = WDTPW + WDTHOLD; P6DIR |= BIT2;P6OUT |= BIT2; /關電平轉換,P6.2連接了開發(fā)板上 /的電平轉換芯片的使能端,與實際功能無關 WDTCTL=WDT_ADLY_1000;/設置看門狗ACLK定時器1000ms定時 IE1|=WDTIE;/開看門狗定時器中斷 P2DIR|=BIT

2、0; P2OUT|=BIT0; _enable_interrupt();/_EINT();/開總中斷 while(1) LPM0;/進入低功耗模式一,CPUOFF return 0;#pragma vector = WDT_VECTOR_interrupt void watchdog_timer() P2OUT=P2OUT;二 /*定時器A增計數(shù)模式下,ALK=32768HZ,MCLK=SMCLK=DCOCLK=800KHZ利用定時器溢出中斷TAIE實現(xiàn)小燈L1每0.5秒閃滅一次,時鐘選擇ALK,8分頻注意:TTAIE指TAR計數(shù)器溢出,從65535 到0的變化,由 TAIFG 引起的,TAI

3、FG 一般進 TIMERA1_VECTOR中斷向量;*/#include "io430.h"int 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,增計數(shù)模式, /8分頻,使能定時器中斷 CCR0=4095; /CCIE while(1) LPM0; return 0;#pragma

4、vector=TIMERA1_VECTOR_interrupt void Timer_A() switch(TAIV) case 2:break; case 4:break; case 10:P2OUT=P2OUT;break; 三 /*定時器A增計數(shù)模式下,ALK=32768HZ,MCLK=SMCLK=DCOCLK=800KHZ實現(xiàn)小燈L1每0.5秒閃滅一次,時鐘選擇SMCLK,使用CCIE中斷。注意:CCIE指捕獲到相應信號(捕獲模式下) ;定時時間到(比較模式下),由CCIFG引起的。CCIFG的話要看用的是哪個定時器,如果是CCR0的話就進TIMERA0_VECTOR,如果是CR1,C

5、CR2則進TIMERA1_VECTOR*/#include "io430.h"int 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,計數(shù)器清零,增計數(shù)模式,8分頻 CCTL0=CCIE;/CCR0中斷允許 CCR0=50000; while(1) LPM0; re

6、turn 0;#pragma vector=TIMERA0_VECTOR_interrupt void Timer_A() P2OUT=P2OUT;四 /*使用CCR0定時中斷。CCR0的值是可以改變的,當CCR0增加到0ffffh后自動把它清為0.實驗效果為:燈先閃的越來越慢,后突然變得很快,再慢慢變慢。CCR0的值越大定時越長,當CCR0超過65535時會自動清理,使得定時時間很短。而通過高低電平的實時改變也可以用來做相應管腳的PWM輸出*/#include "io430.h"int main( void ) / Stop watchdog timer to preve

7、nt time out reset WDTCTL = WDTPW + WDTHOLD; P2DIR|=BIT0; P2OUT|=BIT0; _enable_interrupt(); TACTL=TASSEL_2+TACLR+MC_1+ID_3;/時鐘選擇SMCLK,計數(shù)器清零,增計數(shù)模式,8分頻 CCTL0=CCIE; CCR0=50000; while(1) LPM0; return 0;#pragma vector=TIMERA0_VECTOR_interrupt void Timer_A() P2OUT=P2OUT; CCR0+=1000;五/*定時器連續(xù)計數(shù)模式舉例:1、在需要6553

8、6個時鐘周期的定時器應用場合常用連續(xù)計數(shù)模式。定時器從當前值計數(shù)到0FFFFH后又從0開始計數(shù)。當定時器從0FFFFH到0時設置標志位TAIFG。2、連續(xù)計數(shù)模式下,也可以通過改變TACCRx的值,產(chǎn)生獨立的時間間隔,例如,可以在相應的比較寄存器TACCRx上加上一個時間差,不斷地增加TACCRx的值,使定時器每到一定的時間間隔都能與TACCRx的值相等,從而使中斷標志位置位,申請中斷。以下代碼驗證了上面兩種情況*/#include "io430.h"int main( void ) / Stop watchdog timer to prevent time out res

9、et WDTCTL = WDTPW + WDTHOLD; P2DIR=BIT0+BIT1; P2OUT=BIT0+BIT1; TACTL=TASSEL_1+TACLR+MC_2+TAIE;/ACK,連續(xù)計數(shù)模式 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 voi

10、d Time_a() switch(TAIV) case 2:break; case 4:break; case 10:P2OUT=BIT1;break; 六 /*任務要求:利用定時器A產(chǎn)生4路周期信號,周期分別是4s,2s,1s和0.25s,四路周期信號分別從P2.0-P2.3口輸出。*/#include "io430.h"int main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P2DIR=BIT0+BIT1+BIT2+BIT3; P2OUT=BI

11、T0+BIT1+BIT2+BIT3; TACTL=TASSEL_1+MC_2+TAIE;/ACK,連續(xù)計數(shù)模式,定時器溢出中斷 CCTL0=CCIE; 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_int

12、errupt void Timer_A1() switch(TAIV) case 2: CCR1+=32768/2; P2OUT=BIT2; break; case 4: CCR2+=32768; P2OUT=BIT1; break; case 10: P2OUT=BIT0; break; 七 四乘四按鍵#include "io430.h"#define uchar unsigned char#define unit unsigned intvoid delay(unit time)u

13、nit i;while(time-)for(i=100;i>0;i-1);uchar keyscan(void)  uchar KeyNum;  P1OUT=0X0F;  if(P1IN&0X0F)!=0X0F)      delay(100);    if(P1IN&0X0F)!=0X0F)        

14、;  P1OUT=0XE0;                        /判斷哪列被拉低      if(P1IN&0X0F)=0X0E)           

15、;/判斷哪行被拉低        KeyNum= 0;          if(P1IN&0X0F)=0X0d)        KeyNum= 1;      if(P1IN&0X0F)=0X0b)    

16、;    KeyNum= 2;      if(P1IN&0X0F)=0X07)        KeyNum= 3;        P1OUT=0XD0;      if(P1IN&0X0F)=0X0E)   &#

17、160;    KeyNum= 4;      if(P1IN&0X0F)=0X0d)        KeyNum= 5;      if(P1IN&0X0F)=0X0b)        KeyNum= 6;  &

18、#160;   if(P1IN&0X0F)=0X07)        KeyNum= 7;             P1OUT=0XB0;      if(P1IN&0X0F)=0X0E)       &

19、#160;KeyNum= 8;      if(P1IN&0X0F)=0X0d)        KeyNum= 9;      if(P1IN&0X0F)=0X0b)        KeyNum= 10;      

20、;if(P1IN&0X0F)=0X07)        KeyNum= 11;          P1OUT=0X70;      if(P1IN&0X0F)=0X0E)        KeyNum= 12;   

21、   if(P1IN&0X0F)=0X0d)        KeyNum= 13;      if(P1IN&0X0F)=0X0b)        KeyNum= 14;      if(P1IN&0X0F)=0X07)  &

22、#160;     KeyNum= 15;        else          KeyNum=KeyNum;        return KeyNum;int main( void )  / Stop&#

23、160;watchdog timer to prevent time out reset  WDTCTL = WDTPW + WDTHOLD; P2SEL=0X00; P2DIR=0XFF; P1SEL=0X00; P1DIR=0XF0; while(1)    P2OUT=keyscan(); 八 0-99#include "io430.h"#define

24、 uchar unsigned char #define uint unsigned int#define key (P1IN&0X01)uint keysign=0; void delay(int a) int i,j;for(i=0;i<a;i+)for(j=0;j<200;j+);void keyscan() if(key!=1) delay(10); if(key!=1) if(keysign=1) keysign=0; else keysign=1; delay(1000); uchar table=0x3F,0X06,0x5B,0x4F,0x66,0x6D,0x

25、7D,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; P6DIR=BIT6; while(1) for(a=0;a<10;a+) for(b=0;b<10;b+) for(c=0;c<10;c+) P4OUT=table

26、c; 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=BIT6; P5OUT|=BIT5; P5OUT=BIT5; P4OUT=0xfe; P5OUT=BIT5; delay(20);keyscan();if(a

27、=9&&b=9)break; return 0; 九 數(shù)碼管與定時器測試#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;unit a=0;void key(unit i) P4OUT=YOUi; duan_h;duan_l

28、; 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 to prevent time out reset WDTCTL = WDTPW + WDTHOLD;

29、 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;c<10;c+) P4OUT=WUc; duan_h;duan_l; P4OUT=0XFB; vai_h;vai_l; delay(3); key(i); key1(a); i+; a+

30、;十數(shù)碼管#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/共陰級數(shù)碼管字形代碼表uchar table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x7

31、9,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=(BIT0<<i); weixuan_h; weixuan_l; delay(200); return 0;void

32、delay(uint time) uint a,b; for(a=0;a<=time;a+) for(b=0;b<=300;b+);十一定時器中斷#include "io430.h"int 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+TA

33、IE;CCTL0=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; 十二串口發(fā)送/*程序功能:MCU不停向PC機

34、發(fā)送數(shù)據(jù),在屏幕上顯示0127對應 的ASCII字符-通信格式:N.8.1, 2400-測試說明:打開串口調試精靈,正確設置通信格式,觀察屏幕*/#include <msp430x14x.h>typedef unsigned char uchar;typedef unsigned int uint;void Delays(void);void PutString(uchar *ptr);/*主函數(shù)*/void main(void) uchar *tishi = " MCU sends 0127 to PC and the n screen will display the

35、ir corresponding n ASCII code as 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 |=

36、BIT2; / 關電平轉換 P3SEL |= 0x30; / P3.4,5選擇為UART收發(fā)端口 ME1 |= UTXE0 + URXE0; / 使能USART0收發(fā) UCTL0 |= CHAR; / 8-bit character UTCTL0 |= SSEL0; / UCLK = ACLK UBR00 = 0x0D; / 32k/2400 - 13.65 UBR10 = 0x00; / UMCTL0 = 0x6B; / Modulation UCTL0 &= SWRST; / 初始化UART0狀態(tài)機 IE1 |= URXIE0; / 使能接收中斷 _EINT(); PutStrin

37、g(tishi); while(1) while (!(IFG1 & UTXIFG0); TXBUF0 = value+; value &= 0x7f; / 保證value的數(shù)值小于128 while (!(IFG1 & UTXIFG0); TXBUF0 = 'n' Delays(); /*函數(shù)名稱:PutSting功 能:向PC機發(fā)送字符串參 數(shù):無返回值 :無*/void PutString(uchar *ptr) while(*ptr != '0') while (!(IFG1 & UTXIFG0); / TX緩存空閑? T

38、XBUF0 = *ptr+; / 發(fā)送數(shù)據(jù) while (!(IFG1 & UTXIFG0); TXBUF0 = 'n'/*函數(shù)名稱:Delays功 能:延時一會參 數(shù):無返回值 :無*/void Delays(void) uchar i=20; uint j; while(i-) j=2000; while(j-); 十三串口回發(fā)/*程序功能:接收來自PC機的字符,然后重新發(fā)送給PC機-通信格式:N.8.1, 9600 無校驗,8個數(shù)據(jù)位,1個停止位,波特率9600-測試說明:打開串口調試助手,正確設置通信格式,向學習板 發(fā)送一個字符,觀察是否收到回發(fā)的字符,以及是否

39、 正確*/#include <msp430x14x.h>/*主函數(shù)*/void main(void) /*下面六行程序關閉所有的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;

40、 /關閉電平轉換 P3SEL |= 0x30; / 選擇P3.4和P3.5做UART通信端口 ME1 |= UTXE0 + URXE0; / 使能USART0的發(fā)送和接受 UCTL0 |= CHAR; / 選擇8位字符 UTCTL0 |= SSEL0; / UCLK = ACLK UBR00 = 0x03; / 波特率9600 UBR10 = 0x00; / UMCTL0 = 0x4A; / Modulation UCTL0 &= SWRST; / 初始化UART狀態(tài)機 IE1 |= URXIE0; / 使能USART0的接收中斷 while(1) _EINT(); /打開全局中斷 L

41、PM1; /進入LPM1模式 while (!(IFG1 & UTXIFG0); /等待以前的字符發(fā)送完畢 TXBUF0 = RXBUF0; /將收到的字符發(fā)送出去 /*函數(shù)名稱:UART0_RXISR功 能:UART0的接收中斷服務函數(shù),在這里喚醒 CPU,使它退出低功耗模式參 數(shù):無返回值 :無*/#pragma vector = UART0RX_VECTOR_interrupt void UART0_RXISR(void) LPM1_EXIT; /退出低功耗模式十四串口鍵盤/*程序功能:MCU通過串口向PC機發(fā)送4X4鍵盤的鍵值-通信格式:N.8.1, 9600-測試說明:打開串

42、口調試助手,正確設置通信格式,按動4X4 鍵盤觀察屏幕顯示的按鍵鍵值。*/#include <msp430x14x.h>#include "keypad.h"#include "keypad.C"/引用外部變量的聲明extern unsigned char key_Pressed; extern unsigned char key_val; extern unsigned char key_Flag; void PutString(uchar *ptr);void PutChar(uchar zifu);/*主函數(shù)*/void main(vo

43、id) /*下面六行程序關閉所有的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; uchar *tishi = "This Key's ID is:" P6DIR |= BIT2;P6OUT |= BIT2; /關閉電平轉換 WDTCTL = WDTPW + WDTHOLD; / S

44、top 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 - 3.41 UBR10 = 0x00; / UMCTL0 = 0x4A; / Modulation UCTL0 &= SWRST; / Initialize USART state machine Init_Keypad(); /初始化鍵

45、盤端口 while(1) Key_Event(); if(key_Flag = 1) key_Flag = 0; PutString(tishi); PutChar(key_val); /*函數(shù)名稱:PutSting功 能:向PC機發(fā)送字符串參 數(shù):ptr-指向發(fā)送字符串的指針返回值 :無*/void PutString(uchar *ptr) while(*ptr != '0') while (!(IFG1 & UTXIFG0); / TX緩存空閑? TXBUF0 = *ptr+; / 發(fā)送數(shù)據(jù) while (!(IFG1 & UTXIFG0); TXBUF0

46、 = 'n'/*函數(shù)名稱:PutChar功 能:向PC機發(fā)送一個字符對應的ASCII碼參 數(shù):zifu-發(fā)送的字符返回值 :無*/void PutChar(uchar zifu) while (!(IFG1 & UTXIFG0); if(zifu > 9) /發(fā)送鍵值116對應的ASCII碼 TXBUF0 = 0x30 + zifu/10; while (!(IFG1 & UTXIFG0); TXBUF0 = 0x30 + zifu%10; else TXBUF0 = 0x30 + zifu; while (!(IFG1 & UTXIFG0); T

47、XBUF0 = 'n' /發(fā)送回車字符十五 LED#include "io430.h"void 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; P2DIR=0XFF;/P2口為輸出口 P2OUT=0XFF;/初始化小燈為全滅 while(1) P2OUT=0X

48、FE;/點亮 delay(200); P2OUT=0XFF;/熄滅 delay(200); return 0;void delay(unsigned int time) unsigned int a,b; for(a=0;a<time;a+) for(b=0;b<300;b+);十六/*捕獲/比較模塊之捕獲舉例:ACLK=32768Hz,MCLK=SMCLK=DCOCLK=800KHz,經(jīng)過8分頻后作為定時器TA的時鐘源,定時器TA工作在連續(xù)計數(shù)模式。待捕獲方波信號由軟件產(chǎn)生,經(jīng)P3.0輸出,輸出信號同時接入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 t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論