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

📄 main.c

📁 msp430f22x4系列的C语言编程
💻 C
字号:
#include "msp430x22x4.h"
//此程序是USCIA0的SPI模式中断方式的主机程序
//首先按下图连接好导线,在启动主机程序前先启动从机程序
//然后再启动主机程序,主机程序以中断的方式将每次收到的数据存入0400开始的ram中
//在将收中断的(i=0;)指令处设置断点,当程序运行到此处时观察0400-0500的ram数据
//                 MSP430F2274                      MSP430F2274 
//                     master                        slavor
//             -----------------                     -----------------
//         /|\|              XIN|-                  -|XIN             |/|\
//          | |                 |                    |                | |
//          --|RST          XOUT|-                  -|XOUT         RST|--
//            |                 |                    |                |
//            |             P1.0|-->LED        LED<--|                | 
//            |     p3.0UCA0CLK |------------------->|P3.0            |  
//            |     p3.4UCA0SIMO|------------------->|p3.4UCA0SIMO    |
//            |     P3.5UCA0SOMI|<-------------------|P3.5UCA0SOMI    |
//            |             DVSS|--------------------|DVSS            | 
__no_init char rec_data[256]  @ 0x0400;
char send_data=1;
int main( void )
{   
  unsigned int n;
  WDTCTL=WDTPW+WDTHOLD;                   //关看门狗
  BCSCTL1 =CALBC1_1MHZ;                   //设定DCO为1MHZ
  DCOCTL =CALBC1_1MHZ; 
  do{                                     //等待晶振稳定
  IFG1  &=~OFIFG;                        
  for(n=5000;n>0;n--);
  }while(OFIFG&IFG1);
  P1DIR |=BIT0;                           //LED使能 
  P3SEL |=BIT0+BIT4+BIT5;                 //p3.4为TX,P3.5为RX,P3.0为UCA0CLK
  P3DIR |=BIT4;                           //P3.4为输出方向
  UCA0CTL1 |=UCSSEL0;                     //时钟源选择32768晶振
  UCA0CTL0 |=UCMST+UCSYNC+UCCKPL+UCMSB;   //spi主机模式,spi通讯,时钟极性选为高电平无效,选择最高有效位先发
  UCA0BR1=0;                              //32768/1200=27.3
  UCA0BR0=27;
  UCA0MCTL=0;
  UCA0CTL1 &=~UCSWRST;                    //进入SPI工作模式
  IE2 |= UCA0RXIE;                        //使能spi接收中断
  _BIS_SR(GIE);                           //使能总中断
  UCA0TXBUF=send_data;                    //主机首先发一帧,其收到的第一个数据不确定
  _BIS_SR(LPM3_bits);                     //进入低功耗3
  return 0;  
}

#pragma vector=USCIAB0RX_VECTOR
__interrupt void rx_isr(void)
{
  static unsigned int i=0;
  rec_data[i]=UCA0RXBUF;                  //将收到的数据放入0x0400开始的ram地址
  i++;
  if(i==256)                              //到了256个,再从头开始放
  {
    i=0;
  }
  while(!(UCA0TXIFG&IFG2));               //查询发送标志位
  send_data++;                            //增1后发送
  UCA0TXBUF=send_data;                    
  P1OUT ^=BIT0;                           //LED翻转
}

⌨️ 快捷键说明

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