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

📄 main.c

📁 是MSP430F2274的源代码
💻 C
字号:
#include "msp430x22x4.h"
//此程序是USCI_A0工作在异uart模式下,采用1200波特率进行全双功通讯
//如果只有一块实验板,可以置位USLISTEN来自发自收
//                 MSP430F2274                       MSP430F2274 
//                       (1)                           (2)  
//             -----------------                     -----------------
//         /|\|              XIN|-                  -|XIN             |/|\
//          | |                 |                    |                | |
//          --|RST          XOUT|-                  -|XOUT         RST|--
//            |                 |                    |                |
//            |             P1.0|-->LED        LED<--|                |   
//            |      p3.4UCA0TXD|------------------->|p3.5UCA0RXD     |
//            |      p3.5UCA0RXD|------------------->|p3.4UCA0TXD     |
//            |             DVSS|--------------------|DVSS            | 

__no_init char send_data[256] @ 0x0400;     //数据存储首地址为0x0400
int main( void )
{
  WDTCTL  =WDTPW+WDTHOLD;                   //关看门狗
  BCSCTL1 =CALBC1_1MHZ;                     //设定DCO为1MHZ
  DCOCTL  =CALBC1_1MHZ;
  volatile unsigned int n;
  do                                        //等待晶振稳定
  {
    IFG1 &=~OFIFG;
    for(n=5000;n>0;n--);
  }  while(OFIFG&IFG1);                                     
  P1DIR  |=BIT0;                            //点亮LED
  P1OUT  |=BIT0;
  P3SEL  |=BIT4+BIT5;                       //p3.4为TX,P3.5为RX    
  P3DIR |=BIT4;                             //P3.4为输出方向
  //UCA0STAT |=UCLISTEN;                    //调试时用于自发自收
  UCA0CTL1 |=UCSSEL0;                       //时钟源选择32768晶振
  UCA0BR1=0;                                //设置波特率32768/1200=27.3
  UCA0BR0=27;
  UCA0MCTL |=UCBRS1;                        //UCBRSx=INT(0.3*8)=2        
  UCA0CTL1 &=~UCSWRST;                      //退出USCI设置
  IE2 |=UCA0RXIE+UCA0TXIE;                  //使能收发中断
  _BIS_SR(LPM3_bits+GIE);                   //进入低功耗3并使能总中断
  _NOP();  
  return 0;  
}

#pragma vector =USCIAB0RX_VECTOR
__interrupt void rx_isr(void)
{
  static char i=0;
  P1OUT ^=BIT0;                  //如果作为接收方,每收一帧LED翻转一次
  send_data[i]=UCA0RXBUF;        //将收到的数据放入0x0400开始的RAM地址
  if(i==255)                    //比较是否已经收到了256个数据
  {
    i=0;                         //接收了256个后,再从0x0400开始放数据
  }
  else 
  {
    i++;
  }                                                      
}

#pragma vector =USCIAB0TX_VECTOR
__interrupt void tx_isr(void)
{
  static char j=0;
  P1OUT ^=BIT0;                  //如果作为接收方,每收一帧LED翻转一次
  unsigned int x;
  for(x=0;x<15000;x--);         //在发送前一段延时,确保对方已经处理完上一帧数据
  UCA0TXBUF=j;                  //将待发数据放入发送缓存寄存器中
  j++;
}

⌨️ 快捷键说明

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