msp430f249简单串口程序,却出错。。。。

2019-03-24 08:59发布

本帖最后由 zyf6095 于 2016-9-5 17:28 编辑

如题,利用串口的接收中断,串口助手发字节我希望返回数组内容abc,但遇到俩问题:1、发送任何内容都不能显示(已全速运行),除非按下复位键。2、按下复位键时返回的内容偶尔是我发送的!!!并不是预设的abc,求大神告知哪里的错误,谢谢
#include "msp430f249.h"
char shuzu[3]="abc";
void ini_uart()
{
    P3SEL|=BIT6+BIT7;     //P3.6,P3.7设置为UART功能(串口我用的A1)
    UCA1CTL1 |= UCSWRST; //复位寄存器设置
    UCA1CTL0 = 0x00;   //关闭奇偶校验(默认奇数校验)
    UCA1CTL1 |= 0x40;//波特率发生器参考时钟设置为ACLK
    UCA1BR0 =0x03;//此行与下一行决定整数部分
    UCA1BR1 =0x00;//
    UCA1MCTL = 0x06;//小数调制与低频(关UCOS16)
    UC1IE |= 0x02;//开串口接收与发送中断
    UCA1CTL1 &= ~UCSWRST;//使能USCI模块

}
void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  ini_uart();
  _EINT();
  while(1);
}


#pragma vector=USCIAB1RX_VECTOR
__interrupt void uart(void)
{
        char i;         for(i=0;i<3;i++)
        {
            UCA1TXBUF =shuzu;//我的程序里是UCA1TXBUF=shuzu【i】,但网站编辑器显示不了【i】
            while(!(UC1IFG&UCA1TXIFG));
        }

}


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
zyf6095
1楼-- · 2019-03-24 15:34
<
huaiqiao
2楼-- · 2019-03-24 17:54
 精彩回答 2  元偷偷看……
zyf6095
3楼-- · 2019-03-24 21:05
huaiqiao 发表于 2016-9-5 21:27
建议单步调试,看看,然后在单步调试的时候,一边对照user's guide ,一边看寄存器的值,是否和你配置的一 ...

嗯,谢谢。我已经尝试调试了,发现很神奇的现象,我在for循环结束后加一条指令复位UCA1IFG,再单步运行就可以正常执行。但上来就全速运行还是不行,我以为是串口速度太低的原因,加入延时函数现象依旧。除去手动复位的指令,开启总中断后无法进入while循环。出现Target execution Stop。。。。,醉了
huaiqiao
4楼-- · 2019-03-24 23:42
zyf6095 发表于 2016-9-5 21:53
嗯,谢谢。我已经尝试调试了,发现很神奇的现象,我在for循环结束后加一条指令复位UCA1IFG,再单步运行就 ...

你的意思是for循环结束后,清UCA1IFG标志位?这个不用吧。我看ti的例程中没有清。
这一部分,我另外一个建议是你看看ti相关你的片子的例程。
说实话,我没有仔细看你的代码。。。但是我总觉得你有哪个地方少了些什么?
还有你确定下你的ACLK到否有如你所想要的值。
其次,就是一定要确认硬件没有问题,包括接法,跳线帽什么的。

一周热门 更多>

相关问题

    相关文章