各位帮忙看看为啥无法进入接收中断

2019-03-24 15:45发布

#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条回答
3g465
2019-03-24 21:04
< LZ,您的main函数里有没有Init_UART1();这条调用串口初始化子函的语句?

一周热门 更多>

相关问题

    相关文章