4744|10

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教USART 与PC机通信 [复制链接]

/*****************************************************************************\
文件名: 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, 请高手指教。

最新回复

费心了!  详情 回复 发表于 2009-4-9 10:38
 
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
哪位大侠能够提点一二,小弟感激不尽!
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
for(t0=0;t0<10;t0++)
{
TXBUF0 = t0_buffer[t0] ;//数据送发送缓冲
WDTCTL = 0x5a0C; //清看门狗
while ((IFG1&UTXIFG0)==0);
}
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
你把while((IFG1 & UTXIFG0)==0);
TXBUF0=RXBUF0;
放到接受中断里,然后把推出低功耗去掉 试下
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

5
 

cao456

引用:

for(t0=0;t0<10;t0++)
{
TXBUF0 = t0_buffer[t0] ;//数据送发送缓冲
WDTCTL = 0x5a0C; //清看门狗
while ((IFG1&UTXIFG0)==0);
...
换了以后发现在DEBUG下还是执行到while ((IFG1&UTXIFG0)==0);就执行不过去,中断标志位
UTXIFG0一直为0状态,我在手册上这位默认应该是1,或者没有数据的时候也应该是1啊,太奇怪了!
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用:

你把while((IFG1 & UTXIFG0)==0);
TXBUF0=RXBUF0;
放到接受中断里,然后把推出低功耗去掉 试下
您说的情况也是一样,执行到while((IFG1 & UTXIFG0)==0);就跳不出while循环,一直为真。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

7
 
我现在不明白的是在仿真DEBUG情况下,寄存器的值有些默认为1的,在我workbench 4.20.1 版本中全部都是0,我糊涂了?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 
问题已解决了~ 发现到硬件环境下就成功了。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

9
 
软件仿真?!窝晕……
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用:

软件仿真?!窝晕……
呵呵,还处在菜鸟级别,请原谅啊!
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

11
 
费心了!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表