本程序是《MSP430系列單片機系統工程設計與實踐》書里面的源碼,(包含工程文件 (例3.2.5))完整例程下載:http://www.zg4o1577.cn/bbs/dpj-46245-1.html

關于本程序的詳細解說大家可以點擊上圖下載電子書
- #include <msp430x42x.h>
- unsigned char RedState=0;
- unsigned char GreenState=0;
- unsigned char BlackState=0;
- #define RED_ON P1OUT |= BIT3
- #define GREEN_ON P1OUT |= BIT1
- #define LED_OFF P1OUT =0
- void main( void )
- {
- WDTCTL = WDTPW + WDTHOLD; // 停止看門狗
- FLL_CTL0 |= XCAP18PF; // 配置晶振負載電容
- P1OUT=0;
- P1DIR|=(BIT1+BIT3);
- U0CTL = CHAR; // 異步通訊模式,8位數據,無校驗,1位停止位。
- ME1 |= UTXE0 + URXE0; // 開啟串口0收發模塊
- U0TCTL |= SSEL0; // 選擇ACLK作為串口波特率時鐘源。
- U0BR1 = 0; //
- U0BR0 = 13; // 分頻系數整數部分=13
- U0MCTL = 0x6B; // 分頻系數小數部分調制=5/8。(2400bps)
- P2SEL |= BIT4 + BIT5; // P2.4,5 開啟第二功能,作為串口收發引腳(不同單片機有差別)
- IE1 |= URXIE0; // 允許UART0的接收中斷
- _EINT(); // 總中斷允許
- while(1)
- {
- LPM3;
- }
- }
- /********************************************************************
- * 名 稱:UART_RX()
- * 功 能:串口接收中斷,每接收到1字節會發生一次中斷
- ********************************************************************/
- #pragma vector=UART0RX_VECTOR
- __interrupt void UART0_RX (void)
- {
- switch(RedState)
- {
- case 0 : if (U0RXBUF=='r')RedState=1;
- else RedState=0;
- break;
- case 1 : if (U0RXBUF=='e')RedState=2;
- else RedState=0;
- break;
- case 2 : if (U0RXBUF=='d'){RedState=0; RED_ON;}
- else RedState=0;
- break;
- }
-
- switch(GreenState)
- {
- case 0 : if (U0RXBUF=='g')GreenState=1;
- else GreenState=0;
- break;
- case 1 : if (U0RXBUF=='r')GreenState=2;
- else GreenState=0;
- break;
- case 2 : if (U0RXBUF=='e')GreenState=3;
- else GreenState=0;
- break;
- case 3 : if (U0RXBUF=='e')GreenState=4;
- else GreenState=0;
- break;
- case 4 : if (U0RXBUF=='n'){GreenState=0;GREEN_ON;}
- else GreenState=0;
- break;
- }
- switch(BlackState)
- {
- case 0 : if (U0RXBUF=='b')BlackState=1;
- else BlackState=0;
- break;
- case 1 : if (U0RXBUF=='l')BlackState=2;
- else BlackState=0;
- break;
- case 2 : if (U0RXBUF=='a')BlackState=3;
- else BlackState=0;
- break;
- case 3 : if (U0RXBUF=='c')BlackState=4;
- else BlackState=0;
- break;
- case 4 : if (U0RXBUF=='k'){BlackState=0;LED_OFF;}
- else BlackState=0;
- break;
- }
- }
復制代碼
|