TI中文支持网
TI专业的中文技术问题搜集分享网站

msp430f224 UART模块串行异步通讯实验

unsigned char BUF;                           //全局变量,存放据 

//——————————————————————— 

//关于sign定义 

 unsigned char sign;                          //标记寄存器,最大8位标记 

 #define update         sign |= BIT0          //sign位0:置1时,表示有数据更新. 

 #define check_update   sign & BIT0   

main( void ) 

  

  WDTCTL  =WDTPW+WDTHOLD;                   //关看门狗 

  BCSCTL1 =CALBC1_1MHZ;                     //设定DCO为1MHZ, 

  //[0x10FF] TX2振荡器开,高频模式,设定DCO为1MHZ 

  DCOCTL  =CALBC1_1MHZ; 

  

  volatile unsigned int n; 

  do                                        //等待晶振稳定 

  { 

    IFG1 &=~OFIFG; 

    for(n=5000;n>0;n–); 

  }  while(OFIFG&IFG1);   

  

  P1DIR |=BIT1+BIT2+BIT3;                   //LED–D1,D2,D3 

  P1OUT &= ~BIT1;                           //P11 输出0,D1 LED亮 

  P3SEL |= BIT4+BIT5;                       //p3.4为TX,P3.5为RX     

  P3DIR |= BIT4;                            //P3.4为输出方向(TXD口) 

  

  UCA0CTL1 |=UCSSEL0;                       //[0x40]时钟源选择ACLK=32768晶振 

  

  UCA0BR1=0;                                //设置波特率32768/1200=27.3 

  UCA0BR0=27; 

  

  UCA0MCTL |=UCBRS1;                        //调整寄存器设置UCBRSx=INT(0.3*8)=2        

  UCA0CTL1 &=~UCSWRST;                      //串口状态机设置完毕,退出USCI设置 

  

  IE2 |=UCA0RXIE+UCA0TXIE;                  //允许收发中断 

   _EINT(); 

  LPM3;                                     //进入低功耗3并使能总中断 

  //或写成 _BIS_SR(LPM3_bits+GIE);                    

  _NOP();   

  for(;;) 

  { _DINT();                                //关闭总中断 

    _BIS_SR(LPM3_bits+GIE); 

  }   

 

//**************************************************************************** 

//USCI中断用法 

//USCI_AX和USCI_BX使用同一个中断向量。接收中断标志UCAxRXIFG和UCBxRXIFG和同 

//一个中断向量连接,发送中断标志UCAxTXIFG和UCBxTXIFG分享另一个中断向量。 

//**************************************************************************** 

//接收中断服务程序 

#pragma vector =USCIAB0RX_VECTOR 

__interrupt void rx_isr(void) 

 BUF = UCA0RXBUF;                          //接收一个数据后,存入一个全局变量中 

 P1OUT ^= BIT2;                            //用D2 LED指示接收到一个数据 

 update; 

 LPM3_EXIT;                               //接收完一个数据后,退出低功耗模式 

 

//**************************************************************************** 

//大家注意,MSP430F2上电后UCA0的中断标志寄存器IFG2 中UCA0TXIFG发送中断标志位就置1. 

//在初始化时,只要总中断允许了,同时发送中断也允许了.初始化完后,发送中断服务程序就 

//被马上执行. 

//当UCA0TXBUF空闲时,中断标志寄存器IFG2 中UCA0TXIFG发送中断标志位就置1. 

//发送中断服务程序 

#pragma vector =USCIAB0TX_VECTOR 

__interrupt void tx_isr(void) 

  if(check_update)                           //是否有数据更新 

  {  UCA0TXBUF = BUF;                        //是,将接收到的数据发回去 

    sign &= ~BIT0;                           //清除标志 

    P1OUT ^= BIT3;                           //用D3 LED指示发送完一个数据 

   } 

//**************************************************************************** 

cedar_xuesong:

看了,不错,试用一下

赞(0)
未经允许不得转载:TI中文支持网 » msp430f224 UART模块串行异步通讯实验
分享到: 更多 (0)