Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

MSP430F149串口通讯问题

$
0
0

运行正常:

见附件

运行失败:

见附件

电路板参照购买的电路板设计的,两个单片机烧录的程序是同一个串口程序(文件后面有程序源码),下面是我设计的电路板设计图,我设计的电路板输出PWM波的程序是可以正常执行的,但是串口程序总是失败,我想问一下是什么原因,快哭了

电路板原理图

 

程序源码:

/******************** HY-M149 ****************************

 * 文件名  :main.c

 * 描述    :MCU不停向PC机发送数据,在屏幕上显示0~127对应

 *          的ASCII字符

 *                   

 * 实验平台:HY-M149 V2.0开发板

 * 硬件连接:

 * 测试说明:(1)打开串口调试精灵,正确设置通信格式,观察屏幕

 *           (2)打开串口调试助手,正确设置通信格式,向学习板

 *        发送一个字符,观察是否收到回发的字符,以及是否正确

 * 通信格式:N.8.1, 9600

*****************************************************************************/

#include  <msp430x14x.h>

typedef unsigned char uchar;

typedef unsigned int  uint;

uchar *tishi = " 你好!!\

               \n  西安海洋电子\

                    \n HY-M149  V2.0  开发板";

void PutString(uchar *ptr);

/***************************时钟初始化*************************/

void Clk_Init()

{

    unsigned char i;

    BCSCTL1&=~XT2OFF;//打开XT振荡器

    BCSCTL2|=SELM_2+SELS;//MCLK 8M and SMCLK 8M 

    do

    {

      IFG1 &= ~OFIFG;//清除振荡错误标志

      for(i = 0; i < 0xff; i++)  _NOP();//延时等待

    }

    while ((IFG1 & OFIFG) != 0);//如果标志为1继续循环等待

    IFG1&=~OFIFG;

}

/***************************关闭所有IO口*************************/

void Close_IO()

{

    /*下面六行程序关闭所有的IO口*/

    P1DIR = 0XFF;P1OUT = 0XFF;

    P2DIR = 0XFF;P2OUT = 0XFF;

    P3DIR = 0XFF;P3OUT = 0XFF;

    P4DIR = 0XFF;P4OUT = 0XFF;

    P5DIR = 0XFF;P5OUT = 0XFF;

    P6DIR = 0XFF;P6OUT = 0XFF;

}

/********************主函数********************/

void main(void)

{

    WDTCTL = WDTPW + WDTHOLD;   //关闭看门狗

    Clk_Init();                 //时钟初始化,外部8M晶振

    Close_IO();                 //关闭所有IO口,防止IO口处于不定态

    P3SEL |= 0x30;                            // 选择P3.4和P3.5做UART通信端口

    ME1 |= UTXE0 + URXE0;                     // 使能USART0的发送和接受

    UCTL0 |= CHAR;                            // 选择8位字符

    UTCTL0 |= SSEL0;                          // UCLK = ACLK

    UBR00 = 0x03;                             // 波特率9600

    UBR10 = 0x00;                             //

    UMCTL0 = 0x4A;                            // Modulation

    UCTL0 &= ~SWRST;                          // 初始化UART状态机

    IE1 |= URXIE0;                            // 使能USART0的接收中断

    _EINT();                                  //打开全局中断

    PutString(tishi);

    while(1)

    {                                      

        LPM1;                                  //进入LPM1模式

        while (!(IFG1 & UTXIFG0));             //等待以前的字符发送完毕

        TXBUF0 = RXBUF0;                       //将收到的字符发送出去

    }

}

/*******************************************

函数名称:PutSting

功    能:向PC机发送字符串

参    数:无

返回值  :无

********************************************/

void PutString(uchar *ptr)

{

   while(*ptr != '\0')

   {

      while (!(IFG1 & UTXIFG0));                // TX缓存空闲?

      TXBUF0 = *ptr++;                       // 发送数据

   }

   while (!(IFG1 & UTXIFG0));

   TXBUF0 = 13;while (!(IFG1 & UTXIFG0));

   TXBUF0 = 13; TXBUF0 = 10;

}

/*******************************************

函数名称:UART0_RXISR

功    能:UART0的接收中断服务函数,在这里唤醒

          CPU,使它退出低功耗模式

参    数:无

返回值  :无

********************************************/

#pragma vector = UART0RX_VECTOR

__interrupt void UART0_RXISR(void)

{

  LPM1_EXIT;                 //退出低功耗模式

}


Viewing all articles
Browse latest Browse all 3634

Trending Articles