msp430串口发送程序有一句while((UTCTL1&0x01)==0);跳不过去,为什么?

部分程序在此for(i=0;i<23;i++){UTCTL1|=BIT2;TXBUF1=i;while((UTCTL1&0x01)==0){P1OUT=0xff;}UTC... 部分程序在此
for(i=0;i<23;i++)
{
UTCTL1|=BIT2;

TXBUF1=i;

while((UTCTL1&0x01)==0)
{
P1OUT=0xff;
}

UTCTL1&=~BIT2;

TXBUF1=Data[i];

while((UTCTL1&0x01)==0);
}
初始化
void Init(void)
{
UCTL1&=~SWRST; //SWRDT复位,UART允许

UCTL1=0x10+MM; //8位数据位,1位停止位,地址位模式

UBR01=0x03;

UBR11=0x00;

UMCTL1=0x4A; //使用32kHZ晶振,波特率为9600bps

UTCTL1=0x10; //选定ACLK(32kHZ晶振)为时钟源

ME2|=0x30; //UART发送,接收模块允许。

P3SEL=0xC0; //P3.6、P3.7由UART1发送模块占用

P3DIR=0x40; // P3.6输出
}
展开
 我来答
百度网友f6f87e3
2010-09-05 · TA获得超过302个赞
知道小有建树答主
回答量:312
采纳率:0%
帮助的人:157万
展开全部
UTCTL1本身的SWRST位在复位状态下是置位的,应在初始化USART的相应寄存器中加上UTCTL1&=~SWRST;
UTCTL1|=BIT2;是使用了单片机的SPI模块,假如是RS232通信,此句边是错误的。

我给你一个正确的初始化程序吧:
P3SEL|=0x30;
UCTL0|=CHAR;
UTCTL0|=SSEL0;

UBR00=0x06; //波特率
UBR10=0x00;
UMCTL0=0X77;

UCTL0&=~SWRST;
ME1|=UTXE0+URXE0;z
IE1|=URXIE0;
dreamoftoday
2010-09-04 · TA获得超过756个赞
知道小有建树答主
回答量:182
采纳率:0%
帮助的人:251万
展开全部
while((UTCTL1&0x01)==0);
这句是个循环,如果UTCTL1&0x01==0的话一直进行下去,跳不过去。如果不等的话,就不会执行。
因为是部分代码,不知道它的作用是什么,我猜想是从P1口发送数据到Data数组,while((UTCTL1&0x01)==0);这句是等待传输完毕后结束,就是跳出。
单纯从程序看它是个死循环,但结合硬件,UTCTL1的值应该会随着数据传输而改变,因此会跳出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式