MSP430f5529LP通过串口数据控制LED亮灭

此篇博客详细介绍了如何使用MSP430f5529LP单片机,基于TI官方示例,通过串口实现LED灯的智能控制。程序根据接收到的不同字符指令(1, 2, 3, 4),控制LED1和LED2的状态,并伴有相应的提示信息。适合学习嵌入式编程与串口通信的读者。
摘要由CSDN通过智能技术生成

基于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;

  }
}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值