MSP430f5529LP通过串口数据控制LED亮灭
基于MSP430f5529LP的程序
根据TI官网的串口回环例程改编,判断串口接收的数据。如果接收到“1”就点亮LED1,熄灭LED2;接收到“2”点亮LED2,熄灭LED1;接收到“3”同时点亮两个LED;接收到“4”同时熄灭两个LED。
演示
串口调试助手设置如下
接线图如下
程序
#include <msp430.h> void sendstring(unsigned char *p) { while(*p!= ) { 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 Users 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) //判断接收的数据 { case1:P1OUT |= BIT0; //打开LED1 P4OUT &= ~ BIT7; //关闭LED2 sendstring("LED1 on "); sendstring("LED2 off "); break; case2: P4OUT |= BIT7; //打开LED2 P1OUT &= ~ BIT0; //关闭LED1 sendstring("LED1 off "); sendstring("LED2 on "); break; case3:P1OUT |= BIT0; //打开LED1 P4OUT |= BIT7; //打开LED2 sendstring("LED1 on "); sendstring("LED2 on "); break; case4: P1OUT &= ~ BIT0; //关闭LED1 P4OUT &= ~ BIT7; //关闭LED2 sendstring("LED1 off "); sendstring("LED2 off "); break; default: P1OUT &= ~ BIT0; P4OUT &= ~ BIT7; break; } }