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

2019-07-25 15:03发布

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;                     //设定DCO1MHZ,
  //[0x10FF] TX2振荡器开,高频模式,设定DCO1MHZ
  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.5RX     
  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使用同一个中断向量。接收中断标志UCAxRXIFGUCBxRXIFG和同
//一个中断向量连接,发送中断标志UCAxTXIFGUCBxTXIFG分享另一个中断向量。
//****************************************************************************
//接收中断服务程序
#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指示发送完一个数据
   }
}
//****************************************************************************
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
android2
1楼-- · 2019-07-25 17:48
 精彩回答 2  元偷偷看……
dirtwillfly
2楼-- · 2019-07-25 19:12
android2 发表于 2015-9-25 10:10
感谢版主分享,f224能和247替换吗

应该差别不大,没详细对比过。

一周热门 更多>