打印

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

[复制链接]
776|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dirtwillfly|  楼主 | 2015-9-24 22:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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指示发送完一个数据
   }
}
//****************************************************************************

相关帖子

沙发
android2| | 2015-9-25 10:10 | 只看该作者
感谢版主分享,f224能和247替换吗

使用特权

评论回复
板凳
dirtwillfly|  楼主 | 2015-9-25 10:44 | 只看该作者
android2 发表于 2015-9-25 10:10
感谢版主分享,f224能和247替换吗

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

使用特权

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

本版积分规则

个人签名:欢迎进入TI MCU论坛      21ic TI技术交流1群:61549143(已满),  21ic TI技术交流2群:311421422 我的博客:http://blog.timcu.com/

1180

主题

34846

帖子

1117

粉丝