打印

求助g2553串口通信问题

[复制链接]
3404|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wudayongnb|  楼主 | 2012-6-22 09:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
话说发送字符在中断函数里能发,在主程序里就不行了,不知道为什么呀,请教啊,以下是程序,只有字符‘b’发不出去#include<msp430g2553.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uchar x)
{
    uchar a,b;
    for(a=x;a>0;a--)
      for(b=100;b>0;b--);
}
void uart_init()
{
   //UCA0CTL1|= UCSWRST;
   //UCA0CTL0|=UCMSB;
   UCA0CTL1|=UCSSEL_2;
   UCA0BR0=104;           //波特率为9600
   UCA0BR1=0;
   UCA0MCTL=UCBRS0;
   P1SEL|=BIT1+BIT2;     //将P1.1 P1.2设为第二功能
   P1SEL2 = BIT1 + BIT2;
   P1DIR&=~BIT3;
   P1REN|=BIT3;
   P1OUT|=BIT3;
   P1IES|=BIT3;
   P1IFG&=~BIT3;
   P1IE|=BIT3;
   UCA0CTL1&=~UCSWRST;
   IE2|=UCA0RXIE;
}
void send(uchar c)
{
    UCA0TXBUF=c;   
    while(!(IFG2&UCA0TXIFG));
    IFG2&=~UCA0TXIFG;
}
void main()
{
    WDTCTL=WDTPW+WDTHOLD;
    DCOCTL=CALDCO_1MHZ;       //将DCO设为1mhz
    BCSCTL1=CALBC1_1MHZ;
    uart_init();   
    _BIS_SR(LPM0_bits+GIE);
    while(1)
    {
        send('b');
        delay(20);
    }
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void get()
{
    uchar c;
    c=UCA0RXBUF;
    IFG2&=~UCA0RXIFG;
    //UCA0TXBUF=c;
    //while(!(IFG2&UCA0TXIFG));
    //IFG2&=~UCA0TXIFG;
    send(c);
    send('m');
}
#pragma vector=PORT1_VECTOR
__interrupt void key()
{
    send('k');
    send('e');
    send('y');
    P1IFG&=~BIT3;
}

相关帖子

沙发
wznpmm| | 2012-6-26 09:58 | 只看该作者
注释掉这句话
_BIS_SR(LPM0_bits+GIE);
就可以了。
因为此时mclk已经关闭了。
进入中断后可以发射是因为,进入中断后cpu被唤醒了。

使用特权

评论回复
板凳
永远的不知| | 2012-6-28 12:09 | 只看该作者
2楼说的非常对。
修改程序时,本身就是一些简单的例程,最好要仔细阅读程序,搞清楚每一条语句的意义。

使用特权

评论回复
地板
wudayongnb|  楼主 | 2012-8-19 10:07 | 只看该作者
谢谢,明白了

使用特权

评论回复
5
张永标张标| | 2013-4-22 15:56 | 只看该作者
怎么把2533 的移植到2231

使用特权

评论回复
6
pmp| | 2013-4-24 00:12 | 只看该作者
解决了没?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

69

帖子

0

粉丝