基于MSP430f5529LP的程序
根据TI官网的串口回环例程改编,判断串口接收的数据。如果接收到“1”就点亮LED1,熄灭LED2;接收到“2”点亮LED2,熄灭LED1;接收到“3”同时点亮两个LED;接收到“4”同时熄灭两个LED。
演示
串口调试助手设置如下
接线图如下
程序
#include <msp430.h>
void sendstring(unsigned char *p)
{
while(*p!='\0')
{
while(!(UCA0IFG&UCTXIFG));
UCA0TXBUF=*p++;
}
}
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR |= BIT0; //P1.0方向
P1OUT &= ~ BIT0; //P1.0输出低电平
P4DIR |= BIT7; //P4.7方向
P4OUT &= ~ BIT7; //P4.7输出低电平
P3SEL |= BIT3+BIT4; // P3.3,4 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 9; // 1MHz 115200 (see User's Guide)
UCA0BR1 = 0; // 1MHz 115200
UCA0MCTL |= UCBRS_1 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
__no_operation(); // For debugger
}
// Echo back RXed character, confirm TX buffer is ready first
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(USCI_A0_VECTOR))) USCI_A0_ISR (void)
#else
#error Compiler not supported!
#endif
{
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
//UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
switch(UCA0RXBUF) //判断接收的数据
{
case'1':P1OUT |= BIT0; //打开LED1
P4OUT &= ~ BIT7; //关闭LED2
sendstring("LED1 on\r\n");
sendstring("LED2 off\r\n");
break;
case'2':
P4OUT |= BIT7; //打开LED2
P1OUT &= ~ BIT0; //关闭LED1
sendstring("LED1 off\r\n");
sendstring("LED2 on\r\n");
break;
case'3':P1OUT |= BIT0; //打开LED1
P4OUT |= BIT7; //打开LED2
sendstring("LED1 on\r\n");
sendstring("LED2 on\r\n");
break;
case'4':
P1OUT &= ~ BIT0; //关闭LED1
P4OUT &= ~ BIT7; //关闭LED2
sendstring("LED1 off\r\n");
sendstring("LED2 off\r\n");
break;
default: P1OUT &= ~ BIT0;
P4OUT &= ~ BIT7;
break;
}
}