/**********************************************************************/
/*it
名稱:串口通信 io
功能:將接到的數據組後原封不動的發送出去 class
*/
/**********************************************************************/ 軟件
#include <msp430x41x2.h> 數據
unsigned char i,ii,n;
unsigned char RX[20]={0}; top
void UART_init() word
{
P6SEL |= BIT5+BIT6; // P6.5,6 = USCI_A0 RXD/TXD 端口
UCA0CTL1 |= UCSSEL_1; // CLK = ACLK while
UCA0BR0 = 0x03; // 32k/9600 - 3.41 ps
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));
}
}
}