MSP430 UART 测试程序

  • 程序1解释

1.P3端口对应着UART模块的端口复用,其中P3.4和P3.5如果要作为UART的发送和接收端口,需要进行功能选择

P3.3/UCLK0
P3.4/UTXD0 P3.6/UTXD1
P3.5/URXD0 P3.7/URXD1

2.按照UART的初始化顺序必须先使SWRST=1,即UART处於复位状态时来设置寄存器。因为上电后默认情况下SWRST就是1,所以不用再设置一次了,直接使能ME,设置UCTL,UTCTL等控制寄存器即可。设置完成之后再清除SWRST位,最后使能接收中断,使能全局中断。

选的时钟是ACLK,设置的波特率为32k/2400=13.65
UBR存储的是整数部分,UBR10=0x00,UBR00 = 0x0D,
UMCTL0=0x6B,这些都可以查表得到!


#include
typedef unsigned char uchar;
typedef unsigned int uint;

void Delays(void);
void PutString(uchar *ptr);

/********************主函数**********************/
void main(void)
{
uchar *tishi = " MCU sends 0~127 to PC and the
\n screen will display their corresponding
\n ASCII code as follows:";
uchar value = 0;
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
P3SEL |= BIT4+BIT5; // P3.4,5选择为UART收发端口
ME1 |= UTXE0 + URXE0; // 使能USART0收发
UCTL0 |= CHAR; // 8-bit character
UTCTL0 |= SSEL0; // UCLK = ACLK
UBR00 = 0x0D; // 32k/2400 - 13.65
UBR10 = 0x00; //
UMCTL0 = 0x6B; // Modulation
UCTL0 &= ~SWRST; // 初始化UART0状态机
IE1 |= URXIE0; // 使能接收中断
_EINT();
PutString(tishi);
while(1)
{
while (!(IFG1 & UTXIFG0));
TXBUF0 = value++;
value &= 0x7f; // 保证value的数值小于128
while (!(IFG1 & UTXIFG0));
TXBUF0 = '\n';
Delays();
}
}


3.发送数据的过程是:首先检查IFG1寄存器中的UTXIFG0位是否为0,如果为0则表示发送中断已经过去,即TXBUF0为空可以继续存入下一个要发送的字符。最后发送完成发送一个换行符号。

//向PC机发送字符串
void PutString(uchar *ptr)
{
while(*ptr != '\0')
{
while (!(IFG1 & UTXIFG0)); // TX缓存空闲?
TXBUF0 =*ptr++; // 发送数据
}
while (!(IFG1 & UTXIFG0));
TXBUF0 = '\n';
}

//延时
void Delays(void)
{
uchar i=20;
uint j;
while(i--)
{
j=2000;
while(j--);
}
}

你可能感兴趣的:(MSP430 UART 测试程序)