6270|13

78

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

一个简单程序(UART),不晓得问题出在那里,请大家帮哈忙! [复制链接]

以下代码是UART0操作:收到上位机的字符然后转送回去。结果是能收到,但是是错误的,如发 01 收到 C0,请大家看看是那里出错了,小弟刚开始用430。

/****************************************************
说明:串口测试程序
波特率:9600bps
****************************************************/

#include"msp430x16x.h"
#include"UartTest.h"
#include"initialize.h"

extern unsigned char chr;

void intiuart0(void)
{

// UCTL0&=~SWRST;
UCTL0=CHAR;
UTCTL0|=SSEL0;
UBR00=0x03;
UBR10=0x00;
UMCTL0=0x4A;
// ME1|=URXE0;
ME1 |= UTXE0 + URXE0; // Ena××e USART0 TXD/RXD
IE1 |= URXIE0; //允许接收中断
P3SEL|=0X30;
P3DIR|=BIT34; //设置为输出
P3DIR&=~BIT35; //设置为输入
_EINT();
}
/**************
串口中断服务
**************/

#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx(void)
{
while ((IFG1 & UTXIFG0) == 0); // USART0 TX buffer ready?
chr = RXBUF0;
TXBUF0 = chr;
}

最新回复

ME2 |= UTXE0 + URXE0; // Ena××e USART0 TXD/RXD  详情 回复 发表于 2006-4-26 23:04
 
点赞 关注

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
查看一下硬件电路吧
程序上好象没问题。
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
while ( ((UTXIFG0 & IFG1) == 0) && ((U0TCTL & TXEPT) == 0)) { };
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 
初始化时

U0CTL |= SWRST;
.....

然后
U0CTL &= ~SWRST;
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 
用这个程序试试
#include <msp430x16x.h>

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
ME1 |= UTXE0 + URXE0; // Ena××e USART0 TXD/RXD
UCTL0 |= CHAR; // 8-bit character
UTCTL0 |= SSEL0; // UCLK = ACLK
UBR00 = 0x03; // 32k/9600 - 3.41
UBR10 = 0x00; //
UMCTL0 = 0x4A; // Modulation
UCTL0 &= ~SWRST; // Initialize USART state machine
IE1 |= URXIE0; // Ena××e USART0 RX interrupt

_BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/ interrupt
}

#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
while (!(IFG1 & UTXIFG0)); // USART0 TX buffer ready?
TXBUF0 = RXBUF0; // RXBUF0 to TXBUF0
}
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
多谢楼上各位热心人!!

原先我在主程序里加过测过代码,结果是上位机能正确收到下位机发送的字符;也测试过上位机发送数据时的波形,进430之前都是正确的,就是不能正确收到上位机的数据。

我照楼上各位给的方法去试一下。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
还是一样的问题。
仿真时,接收缓冲RXBUF里数据不是上位机发送的数据,接收到的是错误数据,但是430能把接收到的错误数据正确送回上位机,不明白是怎么回事。
不晓得论坛能不能贴图,我想把串口部分电路贴上来给大家看哈 是不是硬件有问题。
 
 
 

回复

121

帖子

0

TA的资源

一粒金砂(中级)

8
 
查查232的通讯芯片包括相关电路,斑竹的程序是否使用测试了?问题解决了没有?
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

9
 
代码我试过了,也是一样的问题。
不过发现一个这样的现象:不论是斑竹的代码还是我原来的代码,在仿真时(不外加电、由仿真器供电的情况),发现能正确的收发数据,此时测了一下仿真器供电为:2.5V左右;一旦外加电源(超过2.7V)问题就出来了,这是怎么回事呢?很着急啊,这个问题不解决后面的事情就没法做了!!
请各位430高手指点一下迷津,问题在出那部分??
 
 
 

回复

64

帖子

0

TA的资源

纯净的硅(初级)

10
 
你外加电源时,是否仿真器也在继续供电?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

11
 
你是循环发送接受的???

时间太快了 很可能错的
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

12
 
是这样的:仿真器上有个跳针,为允许外加电仿真和禁止外加电仿真。外加电超过2.7V时就出问题了,即使不仿真、全速运行时,也是同样问题。
另外我用的是网上的串口调试助手,自动发送数据,间隔1S,这应该不是很快吧,还有,手动发送也是这样啊
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

13
 
while ((IFG1 & URXIFG0) == 0);
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

14
 
ME2 |= UTXE0 + URXE0; // Ena××e USART0 TXD/RXD
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
直播报名最后1周:艾迈斯欧司朗 OSP 开放协议,从氛围灯动态照明到传感器交互融合
直播时间:4月22日(周二)10:00
直播奖励:京东卡、蓝牙温湿度计、定制水杯

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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

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

北京市海淀区中关村大街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
快速回复 返回顶部 返回列表