用430的lunchpad写了一个uart通讯小程序,功能是实现“回声”,把PC发给430的数据再返回给PC。
问题1:无论选择MSB先发送还是LSB先发送(UCA0CTL0寄存器UCMSB位),接收到的数据都没有变化,为什么?
问题2:程序中设置通讯参数为偶校验,PC端串口调试器使用偶校验发送数据时,功能正常。改为PC端使用奇校验发送数据后,没有数据返回,但状态寄存器UCA0STAT中各标志位没有变化。如果使能UCA0CTL0寄存器的UCRXEIE位,PC端能够收到数据返回,但UCA0STAT仍然没有变化。为什么?
代码如下:
#include "msp430g2553.h"
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
//设置DCO频率
BCSCTL1=CALBC1_1MHZ;
DCOCTL=CALDCO_1MHZ;
//使能RXD,TXD
P1SEL=BIT1+BIT2;
P1SEL2=BIT1+BIT2;
//初始化LED
P1DIR|=BIT0+BIT6;
P1OUT&=~BIT0;
//校验使能,偶校验,数据位7
UCA0CTL0|=BIT7+BIT6+BIT4;
//选择SMLK为uart时钟源
UCA0CTL1|=UCSSEL_2;
//波特率9600
UCA0BR0=104;
UCA0BR1=0;
UCA0MCTL=UCBRS0;
UCA0CTL1&=~UCSWRST;
//UCA0CTL1|=BIT5;
IE2|=UCA0RXIE;
_EINT();
LPM0;
return 0;
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
while(!(IFG2&UCA0TXIFG));
UCA0TXBUF=UCA0RXBUF;
P1OUT^=BIT0+BIT6;
}
此帖出自
小平头技术问答
如果是初学的话,建议对语句多加注释。这样你看的明白,别人也看得懂。
if可以的话,去TI的官网上下载例程参考下。
一周热门 更多>