|
/*****************************************************************************\
文件名: main.c
描述;用于MSP430F149。
异步通讯。
版本:4.20.1 sun_seven
\*****************************************************************************/
#include <MSP430x14x.h>
#define USART_DIR P3DIR
#define USART_SEL P3SEL
#define UTXD0 BIT4
#define URXD0 BIT5
const unsigned char Data[6]="HELLO";
void InitSys(); //初始化
void UartInit();
int main( void )
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
InitSys(); //初
LPM3;
for(;;)
{
while((IFG1 & UTXIFG0)==0);
TXBUF0=RXBUF0;
_NOP();
}
}
/*****************************************************************************
系统初始化
******************************************************************************/
void InitSys()
{
unsigned int iq0;
BCSCTL1&=~XT2OFF; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG; // 清除振荡器失效标志
for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振
}
while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振
BCSCTL2 =SELM_2; //选择MCLK为XT2
UartInit(); //初始化USART0
_EINT(); //打开全局中断控制,若不需要打开,可以屏蔽本句
}
/*****************************************************************************
USART0初始化
******************************************************************************/
void UartInit()
{
USART_SEL |= UTXD0 +URXD0; //设置p3.4/p3.5管脚为第二功能
USART_DIR |= UTXD0; //设置p3.4输出管脚
UCTL0 = CHAR+MM+SWRST; //8位数据,1位停止位,地址位多机协议
//U0RCTL |= URXWIE; //只有地址字符使URXIFG置位
UTCTL0 = SSEL0; // 选择UCLK为ACLK
UBR00 = 0x3; //设置波特率9600bit/s
UBR10 = 0;
UMCTL0 = 0x4A;
UCTL0 &= ~SWRST;
ME1 |= UTXE0 + URXE0; //打开模块USART0
IE1 |= URXIE0 ; //打开USART0接收中断
}
/*****************************************************************************
USART0接收中断函数
******************************************************************************/
#pragma vector=USART0RX_VECTOR
__interrupt void Usart0Rx()
{
LPM3_EXIT;
}
其中上文红色部分调试不过去,我查看寄存器发现UTXIFG0默认值为0,这个在用户手册上默认应该为1,不知道为什么?难道是版本问题?不仅如此其他寄存器默认该我1的,好像在我的IAR中都是0, 请高手指教。
|
|