利用msp430g2253实现串口通信,利用串口调制助手测试

2019-03-24 11:20发布

程序是这样的,但是串口调试助手无法接收到数据我理想的效果是向430发送hello,430回复hello world
#include <msp430g2553.h>
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();

} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
songtaste
1楼-- · 2019-03-24 18:56
< msp430g2553  不小心打错了
sint27
2楼-- · 2019-03-24 19:07
< :TI_MSP430_内容页_SA7 --> 2个明显错误:
1、变量i的处理,仔细看看串口不断接收数据,i不断自增,并不是每次都赋值给A[0]-A[5];
2、不要在中断服务程序里搞   for(k=0;k<10000;k++);这么大的延时
songtaste
3楼-- · 2019-03-24 23:33
 精彩回答 2  元偷偷看……
sint27
4楼-- · 2019-03-25 00:22
songtaste 发表于 2014-7-11 17:03
嗯我改了一下但延迟的程序太大太小好像都不能正常运行。。大概 for(k=0;k

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

一周热门 更多>

相关问题

    相关文章