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输出
} 展开
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输出
} 展开
2个回答
展开全部
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;
UTCTL1|=BIT2;是使用了单片机的SPI模块,假如是RS232通信,此句边是错误的。
我给你一个正确的初始化程序吧:
P3SEL|=0x30;
UCTL0|=CHAR;
UTCTL0|=SSEL0;
UBR00=0x06; //波特率
UBR10=0x00;
UMCTL0=0X77;
UCTL0&=~SWRST;
ME1|=UTXE0+URXE0;z
IE1|=URXIE0;
展开全部
while((UTCTL1&0x01)==0);
这句是个循环,如果UTCTL1&0x01==0的话一直进行下去,跳不过去。如果不等的话,就不会执行。
因为是部分代码,不知道它的作用是什么,我猜想是从P1口发送数据到Data数组,while((UTCTL1&0x01)==0);这句是等待传输完毕后结束,就是跳出。
单纯从程序看它是个死循环,但结合硬件,UTCTL1的值应该会随着数据传输而改变,因此会跳出。
这句是个循环,如果UTCTL1&0x01==0的话一直进行下去,跳不过去。如果不等的话,就不会执行。
因为是部分代码,不知道它的作用是什么,我猜想是从P1口发送数据到Data数组,while((UTCTL1&0x01)==0);这句是等待传输完毕后结束,就是跳出。
单纯从程序看它是个死循环,但结合硬件,UTCTL1的值应该会随着数据传输而改变,因此会跳出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询