打印
[MSP430]

MSP430F149的串口通信问题

[复制链接]
2607|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
justlxy|  楼主 | 2014-4-11 20:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//我想用这个程序来通过PC机向单片机发送0使板子上的LED灯亮,板子上的LED灯是共阳的!
#include <msp430x14x.h>

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD; // 停止看门狗
  P2DIR = 0XFF;
  P2OUT = 0XFF;
  BCSCTL1 |= XTS;               //LFXT1工作于高速晶振模式
  BCSCTL1 |= DIVA_3;            //辅助时钟8分频,输出时钟频率为8分频
  U0TCTL = SSEL0;                //时钟源选择辅助时钟
  U0BR1 = 0;
  U0BR0 = 0x68;
  U0MCTL = 0x40;                //设置波特率9600
  //我的板子上接的晶振比较奇葩:是8000khz的,以上的波特率设置经过验证,是没有问题的。
  UCTL0 &= ~SWRST; // 初始化UART状态机
  UCTL0 |= CHAR; // 数据格式为8位数据
  ME1 |= UTXE0 + URXE0; // 使能USART0的发送TXD和接受RXD
  IE1 |= URXIE0; // 使能USART0的接收中断,让串口接收到数据后能产生中断
  P3SEL |= 0x30; // 选择P3.4和P3.5做UART通信端口
  P3DIR |= 0x10; // 串口发送数据端口为输出,接收数据端口为输入
  _EINT(); // 整个系统使能中断(开总中断)
  LPM1; // 进入LPM1模式
  while(1);
}

//--------------------------------------------------------------------------------------------------------------
//中断服务函数
//--------------------------------------------------------------------------------------------------------------
#pragma vector = UART0RX_VECTOR
__interrupt void UART0_RXISR(void)
{
  while ((IFG1 & UTXIFG0) == 0);
  //等待UTXIFG0=1,只有UTXIFG0=1才可以将接收缓存器的值写给发送缓存器
  //即:当UTXIFG0=1时,才可以进行数据的发送,
  TXBUF0 = RXBUF0; // 将接收到的数据发送到串口
  P2OUT = TXBUF0;
}

相关帖子

沙发
天风立马| | 2014-4-11 20:31 | 只看该作者
然后呢?

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
justlxy + 1 赞一个!
板凳
justlxy|  楼主 | 2014-4-11 20:53 | 只看该作者
然后我自己把问题解决了,是因为我板子上的P2口与BSL下载模块共用,不能用作LED灯显示。

使用特权

评论回复
地板
天风立马| | 2014-4-11 22:54 | 只看该作者
justlxy 发表于 2014-4-11 20:53
然后我自己把问题解决了,是因为我板子上的P2口与BSL下载模块共用,不能用作LED灯显示。 ...

好吧。

使用特权

评论回复
5
郝英俊| | 2015-12-22 21:06 | 只看该作者
为什么我用这个程序,灯就不能亮

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝