MSP430F4152串口操作

/**********************************************************************/ 
 /*

  名称:串口通讯

功能:将接到的数据组后原封不动的发送出去

*/ 
/**********************************************************************/

#include  <msp430x41x2.h>

unsigned char i,ii,n; 
unsigned char RX[20]={0};

void UART_init()


  P6SEL |= BIT5+BIT6;                       // P6.5,6 = USCI_A0 RXD/TXD

  UCA0CTL1 |= UCSSEL_1;                     // CLK = ACLK

  UCA0BR0 = 0x03;                           // 32k/9600 - 3.41

  UCA0BR1 = 0x00;                           //

  UCA0MCTL = 0x06;                          // Modulation

  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**

  IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt

  IE2 &= ~UCA0TXIE;

}

////////////////////////////////////////////////////////////////////////////////

void Iint_Port1(void)//端口P1_4和P1_5中断

{

  P1DIR&=~BIT5; //设置为输入方向P1_4

  P1SEL&=~BIT5; //设置为普通I/O口功能

  P1IES&=~BIT5; //选择上升沿触发

  P1IE|=BIT5; //打开中断允许

  P1IFG&=~BIT5; //P2IES的切换可能使P1IFG.4置位,需清除

  _EINT();

}

/////////////////////////////////////////////////////////////////////

void main(void)

{

  WDTCTL = WDTPW+WDTHOLD;                   // Stop WDT

  FLL_CTL0 |= XCAP14PF;                     // Configure load caps

  Iint_Port1();

  UART_init();

  _BIS_SR(LPM3_bits + GIE);                 // Enter LPM0, interrupts enabled


////////////////////////////////////////////////////////////////////

#pragma vector=USCIAB0RX_VECTOR

__interrupt void USCIA0RX_ISR (void)

{  
  RX[i] = UCA0RXBUF;

  i++;

  if(RX[i-1]==0x68)

  {

    n=i;

    i=0;

  }

}

////////////////////////////////////////////////////////////////////////

#pragma vector = PORT1_VECTOR //外部中断中断入口

__interrupt void P1_ISR(void)

{

  if(P1IFG&BIT5)

  {

    P1IFG&=~BIT5; //多源中断,需靠软件清除P1IFG.5

    for(ii=0;ii<n;ii++) //发送8个数据

    {

      UCA0TXBUF=RX[ii];

      while(!(IFG2&UCA0TXIFG));

    }

  }

}

上一篇:Python中对矩阵的洗牌操作


下一篇:Windows的免費hMailServer搭配SpamAssassin過濾垃圾郵件:安裝與設定