历史上的今天
今天是:2025年02月20日(星期四)
2020年02月20日 | MSP430F5438A系列之串口通讯
2020-02-20 来源:eefocus
前言:
不知不觉,已经毕业快一年!看到某些大佬们在专栏里写了上百篇技术博客,内心还是很膜拜的。职场菜鸟一枚,没有其他挣钱的门路,为了养家糊口,只能默默做技术。以前在学校的时候,学的东西都是皮毛,说白了就是略知一二,还吹牛逼。工作就不一样了,特别是做技术,需要为自己所写的每行代码负责。不然,后果很严重!
串口通信应用广泛,将下位机关键信息通过串口输出到PC机,看起来舒服、用起来方便,在做调试的时候会经常用到。由于项目中使用的控制器是TI公司MSP430F5438A这款芯片,以后所有的程序都是基于该芯片。
本次需要实现的功能:单片机判断串口0收到的字符,输出相应的字符串到上位机。
下面直接上代码:
#include "in430.h" //本征函数库,比如使用_NOP函数就需要添加该头文件
#include "msp430x54xa.h" //MSP430F5系列控制器专用头文件
unsigned char buffer0[] = {"rnHello! Welcome to MAP430F5438A!rn"};
unsigned char buffer1[] = {"rnSorry. You are wrong! See you lala!rn"};
/**********延时函数**************/
void delay(unsigned int n)
{
unsigned i,j;
for(i=0;i } /**********串口0初始化函数**************/ void usartInit() { P3SEL = BIT4 + BIT5; // 选择端口的第二功能,P3.4,5 = USCI_A0 TXD/RXD UCA0CTL1 |= UCSWRST; // 状态机复位 UCA0CTL1 |= UCSSEL_1; // 选择串口时钟源,CLK = ACLK UCA0BR0 = 0x03; // 两个寄存器配置串口的波特率,32kHz/9600=3.41 UCA0BR1 = 0x00; // UCA0MCTL = UCBRS_3+UCBRF_0; // UCBRSx=3, UCBRFx=0 UCA0CTL1 &= ~UCSWRST; // 状态机置位 UCA0IE |= UCRXIE; // 使能 USCI_A0 RX接收中断 } void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT usartInit(); _EINT(); //开总中断 while(1) { } } /**********中断函数**************/ #pragma vector=USCI_A0_VECTOR __interrupt void USCI_A0_ISR(void) { unsigned char *p0,*p1; p0 = buffer0; p1 = buffer1; unsigned char rxData; switch(__even_in_range(UCA0IV,4)) { case 0:break; // Vector 0 - no interrupt case 2: rxData = UCA0RXBUF; // Vector 2 - RXIFG 接收中断 if(rxData == 'A') { while(*p0 != '




