⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 串行异步通讯.txt

📁 430各模块例程包
💻 TXT
字号:
[入门必修]串行异步通讯例子..菜菜
微控网原创 
 

复制代码

//**************************************************************************** 
//描述:在微控MC430F224开发板上实现UART模块串行异步通讯实验。 
//作者:微控技术论坛总版主  DC 
//编程环境:IAR 3.41 
//目标板:MC430F224 (V1.0) 

 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;                               //接收完一个数据后,退出低功耗模式 
} 

//**************************************************************************** 
//大家注意,MSP340F2上电后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指示发送完一个数据 
   } 
} 
//**************************************************************************** 

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -