|
本程序是《MSP430系列單片機(jī)系統(tǒng)工程設(shè)計與實踐》書里面的源碼,(包含工程文件 (例2.9.14)))完整例程下載:http://www.torrancerestoration.com/bbs/dpj-46245-1.html
‘
關(guān)于本程序的詳細(xì)解說大家可以下載電子書點擊上圖即可
- #include <msp430x42x.h>
- #define FRAMEBUF_SIZE 32 /*最大幀長度*/
- #define IDLELINE_TIME 200 /*線路空閑判據(jù)時間*/
- unsigned char FrameBuff[FRAMEBUF_SIZE]; /*接收幀緩沖區(qū)數(shù)組*/
- unsigned int UART_RcvCnt=0; /*接收計數(shù)*/
- #pragma vector=UART0RX_VECTOR
- __interrupt void UART0_RX (void) // 串口接收中斷
- {
- TAR=0; //清除幀空閑計時值
- TACTL|=MC_1; //開始計時
- if(UART_RcvCnt<FRAMEBUF_SIZE) //若緩沖區(qū)未滿
- {
- FrameBuff[UART_RcvCnt]=U0RXBUF; //接收一字節(jié)數(shù)據(jù)
- UART_RcvCnt++; //指向下一字節(jié)
- }
- else IFG1 &=~ URXIFG0; //接受區(qū)已滿,不接收
- } //讀取RXBUF會自動清除串口中斷標(biāo)志,不接收時需要手動清除
- #pragma vector=TIMERA1_VECTOR
- __interrupt void TA_ISR(void) //定時器溢出中斷
- { int i;
- if(TAIV==10) //TA溢出
- {
- TACTL &=~ MC_3; //停止計數(shù)器
- //--------------------------------------------------------------------------
- // 數(shù)據(jù)幀接收完畢,在這里寫數(shù)據(jù)幀處理程序,注意緩沖區(qū)只用前UART_RcvCnt個數(shù)據(jù)
- _NOP(); //在這里設(shè)斷點查看FrameBuff[]數(shù)組的數(shù)據(jù)
- //--------------------------------------------------------------------------
- UART_RcvCnt=0; //清除接收計數(shù)
- for(i=0;i<FRAMEBUF_SIZE;i++) FrameBuff[i]=0; //清除接收緩沖區(qū)(可省略)
- }
- }
- void main( void )
- {
- WDTCTL = WDTPW + WDTHOLD; // 停止看門狗
- FLL_CTL0 |= XCAP18PF; // 配置晶振負(fù)載電容
- U0CTL = CHAR; // 異步通訊模式,8位數(shù)據(jù),無校驗,1位停止位。
- ME1 |= UTXE0 + URXE0; // 開啟串口0收發(fā)模塊
- U0TCTL |= SSEL0; // 選擇ACLK作為串口波特率時鐘源。
- U0BR1 = 0; //
- U0BR0 = 13; // 分頻系數(shù)整數(shù)部分=13
- U0MCTL = 0x6B; // 分頻系數(shù)小數(shù)部分調(diào)制=5/8。(2400bps)
- P2SEL |= BIT4 + BIT5; // P2.4,5 開啟第二功能,作為串口收發(fā)引腳(不同單片機(jī)有差別)
- IE1 |= URXIE0; // 開啟UART0的接收中斷,在中斷內(nèi)接收數(shù)據(jù)
- TACTL = TASSEL_1 + TAIE; // TA設(shè)為增計數(shù)模式,時鐘=ACLK,開中斷
- TACCR0=IDLELINE_TIME; //設(shè)置溢出超時條件
- _EINT(); // 總中斷允許
- while(1)
- {
- //CPU可以執(zhí)行其他任務(wù)
- }
- }
復(fù)制代碼
|
|