本帖最后由 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));
}
}
此帖出自小平头技术问答
嗯,谢谢。我已经尝试调试了,发现很神奇的现象,我在for循环结束后加一条指令复位UCA1IFG,再单步运行就可以正常执行。但上来就全速运行还是不行,我以为是串口速度太低的原因,加入延时函数现象依旧。除去手动复位的指令,开启总中断后无法进入while循环。出现Target execution Stop。。。。,醉了
你的意思是for循环结束后,清UCA1IFG标志位?这个不用吧。我看ti的例程中没有清。
这一部分,我另外一个建议是你看看ti相关你的片子的例程。
说实话,我没有仔细看你的代码。。。但是我总觉得你有哪个地方少了些什么?
还有你确定下你的ACLK到否有如你所想要的值。
其次,就是一定要确认硬件没有问题,包括接法,跳线帽什么的。
一周热门 更多>