2870|4

15

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

利用msp430g2253实现串口通信,利用串口调制助手测试 [复制链接]

程序是这样的,但是串口调试助手无法接收到数据我理想的效果是向430发送hello,430回复hello world
#include
void main(void)
{
        WDTCTL=WDTPW+WDTHOLD;  // Stop WDT
        if(CALBC1_1MHZ==0XFF)
        {
                while(1);
        }
        DCOCTL=0;
        BCSCTL1=CALBC1_1MHZ;// 设置DCO 为1MHz
        DCOCTL=CALDCO_1MHZ;
        P1SEL=BIT1+BIT2;   //P1.1 = RXD, P1.2=TXD
        P1SEL2=BIT1+BIT2;
        UCA0CTL1|=UCSSEL_2;
        UCA0BR0|=0X6D;
        UCA0BR1|=0X00;
        UCA0MCTL|=0X81;
        UCA0CTL1&=~UCSWRST;//**Initialize USCI state machine**  初始化释放,可以操作
   
        IE2|=UCA0RXIE;     //       Enable USCI_A0 RX interrupt  接收中断使能


   __bis_SR_register(LPM0_bits+GIE);//Enter LPM0, interrupts enabled
}
char A[10]={0};
char *B="hello world!";
static int i=0;
void wxd()                                       //输出函数
{
        if((A[0]=='h')&&(A[1]=='e')&&(A[2]=='l')&&(A[3]=='l')&&(A[4]=='0')&&(A[5]=='!'))
        {
                int j;
                for(j=0;j<13;j++)
                {
                  IE2 &= ~UCA0RXIE;
                  UCA0TXBUF=B[j];
                  int k=0;
                  for(k=0;k<10000;k++);
                }
          IE2 |=UCA0RXIE;     
        }
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
                while(!(IFG2&UCA0TXIFG));// USCI_A0 TX buffer ready? 等待TX buffer为空
                {A[i]=UCA0RXBUF;
                i++;
                }
               
                wxd();

}

最新回复

中断产生是主函数是不运行的,一般认为中断服务程序越简单越好 另外你在主函数末尾加上个死循环(保持串口接收监听)试试   详情 回复 发表于 2014-7-11 17:27
 
点赞 关注

回复
举报

15

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
msp430g2553  不小心打错了
 
 

回复

1798

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
2个明显错误:
1、变量i的处理,仔细看看串口不断接收数据,i不断自增,并不是每次都赋值给A[0]-A[5];
2、不要在中断服务程序里搞   for(k=0;k<10000;k++);这么大的延时

点评

嗯我改了一下但延迟的程序太大太小好像都不能正常运行。。大概 for(k=0;k  详情 回复 发表于 2014-7-11 17:03
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(初级)

4
 
sint27 发表于 2014-7-11 16:29
2个明显错误:
1、变量i的处理,仔细看看串口不断接收数据,i不断自增,并不是每次都赋值给A[0]-A[5];
2 ...

嗯我改了一下但延迟的程序太大太小好像都不能正常运行。。大概 for(k=0;k<5000;k++)这个可以正常运行,这和什么有关呢???

点评

中断产生是主函数是不运行的,一般认为中断服务程序越简单越好 另外你在主函数末尾加上个死循环(保持串口接收监听)试试  详情 回复 发表于 2014-7-11 17:27
 
 
 

回复

1798

帖子

0

TA的资源

五彩晶圆(初级)

5
 
songtaste 发表于 2014-7-11 17:03
嗯我改了一下但延迟的程序太大太小好像都不能正常运行。。大概 for(k=0;k

中断产生是主函数是不运行的,一般认为中断服务程序越简单越好
另外你在主函数末尾加上个死循环(保持串口接收监听)试试
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表