[求助] 各位帮忙看看为啥无法进入接收中断

simonprince   2011-8-31 08:51 楼主

#include <msp430x14x.h>

#define uint unsigned int
#define uchar unsigned char

uchar RX1Flag=0;//接收完成标志
uchar TX1Flag=0;//发送中断标志
uchar RX1_BUF[];
uchar TX1_BUF[];
uint RX1_Len;
uint TX1_Len;

void Init_UART1(void)
{
  U1CTL|=SWRST;//复位串口
  U1CTL|=CHAR; //8位数据
  U1TCTL|=SSEL1;//select SMCLK AS CLK
  U1BR0=0Xa0;
  U1BR1=0X01;
  UMCTL1=0Xc0;//19200
  ME2|=UTXE1+URXE1;//使能接收和发送
  U1CTL&=~SWRST;//清除串口复位信号
  IE2|=URXIE1;//使能接收中断
  P3SEL|=BIT6;
  P3SEL|=BIT7;//选择I/O口使用扩展功能和方向
  P3DIR|=BIT6;
}
sent_byte(uchar data)
{
  while((IFG2&UTXIFG1)==0);//判断发送缓冲区是否结束
  U1TXBUF=data; 
 }
#pragma vector=UART1RX_VECTOR
__interrupt  void UART1_RX_ISR(void)
{
  uchar data=0;
  data=U1RXBUF; //读取接受到的数据并且发送到PC机
  sent_byte(data);
  sent_byte(0x00); 
}
main()

  unsigned int i;
  WDTCTL = WDTPW + WDTHOLD ;
  BCSCTL1 &= ~XT2OFF;         //打开XT2振荡器
  do
  {
     IFG1&=~OFIFG;         //清除振荡错误标志
     for(i=0xFF;i>0;i--);
  }
  while((IFG1&OFIFG)!=0); //如果标志为1,则继续循环等待
  BCSCTL2 |= SELM1+SELS;     //MCLK为8MHz,SMCLK为8MHz,    SELM1=SELM_2       
  P1DIR=0X03;
  P1SEL|=(BIT3+BIT2);    // 选择P1^3和P1^2作为外部计数脉冲的输入端 
  P2DIR=0XFF;
  P2OUT=0X80;
  P3DIR|=(BIT0+BIT1+BIT2+BIT3+BIT4);
  P4DIR=0X1F;//P4^1、P4^2、P4^3、P4^4作为PWM的输出端
  P4SEL|=(BIT4+BIT3+BIT2+BIT1);
  P4OUT=0X00;
  P5DIR=0X00;
  P6DIR=0X20;
  _EINT();
  while(1)
  {
    _NOP();
  }
}

要把目标订的实现起来辛苦一点!

回复评论 (3)

回复 楼主 simonprince 的帖子

LZ,您的main函数里有没有Init_UART1();这条调用串口初始化子函的语句?
点赞  2011-8-31 09:09

回复 沙发 3g465 的帖子

我倒
要把目标订的实现起来辛苦一点!
点赞  2011-8-31 09:14

回复 沙发 3g465 的帖子

费了我一早上的时间啊
谢谢楼上上
要把目标订的实现起来辛苦一点!
点赞  2011-8-31 09:29
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复