1420|0

6809

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

MSP430F5438A系列之串口通讯 [复制链接]

串口通信应用广泛,将下位机关键信息通过串口输出到PC机,看起来舒服、用起来方便,在做调试的时候会经常用到。由于项目中使用的控制器是TI公司MSP430F5438A这款芯片,以后所有的程序都是基于该芯片。


本次需要实现的功能:单片机判断串口0收到的字符,输出相应的字符串到上位机。


下面直接上代码:


#include "in430.h"                               //本征函数库,比如使用_NOP函数就需要添加该头文件
#include "msp430x54xa.h"                         //MSP430F5系列控制器专用头文件
unsigned char buffer0[] = {"\r\nHello! Welcome to MAP430F5438A!\r\n"};
unsigned char buffer1[] = {"\r\nSorry. You are wrong! See you lala!\r\n"};  


/**********延时函数**************/
void delay(unsigned int n)
{
  unsigned i,j;
  for(i=0;i
    for(j=0;j<1000;j++);
}


/**********串口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 != '\0')
                  {
                    UCA0TXBUF = *p0++;
                    while(!(UCA0IFG&UCTXIFG));
                    delay(5);
                  }            
                }
               else
               {
                 while(*p1 != '\0')
                  {
                    UCA0TXBUF = *p1++;
                    while(!(UCA0IFG&UCTXIFG));
                    delay(5);
                  }                                       
               }  
              break;  
       case 4:break;                             // Vector 4 - TXIFG 发送中断
       default: break;  
  

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表