X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
微控制器 MCU
请教USART 与PC机通信
nillht
2009-4-4 16:03
楼主
/*****************************************************************************\
文件名: 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, 请高手指教。
点赞
回复评论 (10)
沙发
sunlk
哪位大侠能够提点一二,小弟感激不尽!
点赞
2009-4-6 10:39
板凳
yucaic
for(t0=0;t0<10;t0++)
{
TXBUF0 = t0_buffer[t0] ;//数据送发送缓冲
WDTCTL = 0x5a0C; //清看门狗
while ((IFG1&UTXIFG0)==0);
}
点赞
2009-4-6 19:44
4楼
yygy
你把while((IFG1 & UTXIFG0)==0);
TXBUF0=RXBUF0;
放到接受中断里,然后把推出低功耗去掉 试下
点赞
2009-4-6 20:20
5楼
hsdzcf
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啊,太奇怪了!
点赞
2009-4-6 21:33
6楼
liu21b
引用:
你把while((IFG1 & UTXIFG0)==0);
TXBUF0=RXBUF0;
放到接受中断里,然后把推出低功耗去掉 试下
您说的情况也是一样,执行到while((IFG1 & UTXIFG0)==0);就跳不出while循环,一直为真。
点赞
2009-4-6 21:36
7楼
zhang124
我现在不明白的是在仿真DEBUG情况下,寄存器的值有些默认为1的,在我workbench 4.20.1 版本中全部都是0,我糊涂了?
点赞
2009-4-6 21:39
8楼
jerryzheng88
问题已解决了~ 发现到硬件环境下就成功了。
点赞
2009-4-7 16:08
9楼
94169916
软件仿真?!窝晕……
点赞
2009-4-8 16:01
10楼
nec
引用:
软件仿真?!窝晕……
呵呵,还处在菜鸟级别,请原谅啊!
点赞
2009-4-8 18:54
11楼
withoutpoem
费心了!
点赞
2009-4-9 10:38
最新活动
2024 瑞萨电子MCU/MPU工业技术研讨会——深圳、上海站, 火热报名中
有奖直播报名中!抢占工业4.1先机 文晔科技日等你来!
罗姆有奖直播 | 重点解析双极型晶体管的实用选型方法和使用方法
STM32N6终于要发布了,ST首款带有NPU的MCU到底怎么样,欢迎小伙们来STM32全球线上峰会寻找答案!
免费下载 | 安森美电动汽车充电白皮书,看碳化硅如何缓解“里程焦虑”!
是德科技有奖直播 | 应对未来高速算力芯片的设计与测试挑战
随便看看
喜添新内裤,散分散分~~~~~~
合格的电子工程师需要掌握的知识和技能
关于直流是否有反射电压(电流)的问题,再请教
TMS320C6678外部存储器DDR3硬件设计以及软件调试
国内首个基于Atmel公司AT86RF212芯片的开发评估系统
求帮助
求STM32F107 USB HID 64位收发数据例程
28335通过GPADAT寄存器来改变输出引脚电平?
有人做过WHQL认证吗?
示波器差分探头测电阻两端电压从而计算电流的疑问
长时间不用自动断电功能
原创 FPGA实现的SATA控制器
单片机与硬件知识
F28027自学中
ppc打开com端口的问题
一些电子负载的资料~
FSMC时序问题
科技新品
编译多媒体程序时,报错:cannot open input file 'strmiids.lib'
精心收集的一些license,希望有用
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复