运行正常:
见附件
运行失败:
见附件
电路板参照购买的电路板设计的,两个单片机烧录的程序是同一个串口程序(文件后面有程序源码),下面是我设计的电路板设计图,我设计的电路板输出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; //退出低功耗模式
}