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

📄 main.c

📁 430配合数字电位器使用
💻 C
字号:
#include <msp430x14x.h>
#include "main.h"
#include "mcp2515.h"

/********************************************** 旋钮参数 *********************************************/
u8_t encoderFlag = 0;               // P1.0~P1.7中断标志位
u8_t BPhase, encoderOft;            // 
u8_t LedStatus[3] = { 0x01,0x02,0x03 }; 
u8_t StoreData[8];
ROTSTRUCT RotNO[8];
u8_t RegResult = 0;
void ReadRotData( u8_t IntFlag, u8_t BPhaseData );
void LedOperation( u8_t LedNO, u8_t Operation );
void SPI1Init(void);
void SPI0Init(void);
void delay(u32_t delaytime);
/* 初始状态状态 */
STATE stateMachine = IDLE;
u8_t udata[2];
int temp=0;

void main( void )
{
  // 停止看门狗定时器
  WDTCTL = WDTPW + WDTHOLD;   
  // 初始化系统时钟
  Init_clk(); 
  // 初始化 MSP430F149的端口
  portConfig();  
  // SPI0端口中断,用于驱动CAN总线
  SPI0Init();
  // CAN总线接口芯片初始化设置
  MCP2515_Init();
  // 中断允许
  __enable_interrupt();
 LedStatus[0] = 0x01;
 LedStatus[1] = 0x02;
 LedStatus[2] = 0x03;
 P6SEL = 0x00;
 P6DIR |= 0xff;
 P6OUT = 0xff;
 while(1)
  {   // RX0BUF,0x80优先级,
      //sendStandardFrame(0x00,0x80,0x20,0x01,0x01,0xad,0x05,LedStatus);
      delay(1000000);
  }
}
/************************************************************************************************
*********************************** 以下是系统初始化函数 **************************************
**********************************************************************************************/
/* 初始化430时钟 */
void Init_clk()
{
  BCSCTL1&=~XT2OFF;        // XT2OFF位置0,打开XT2
  do
  {
    IFG1&=~OFIFG;          // 清除振荡失效OFIFG标志位
    for(u8_t m=100;m>0;m--);   // 延时等待50us以上
  }
  while(IFG1&OFIFG);       
  BCSCTL2=SELM_2+SELS+DIVS_3;  //选择XT2作为MCLK,SMCLK,分频8,SMCLK=MCLK=1M
}
/* 430端口配置 */
void portConfig()
{
  /* ADC12 引脚配置 */
  //P6SEL |= 0xff;                        //已设置为8路AD转换器
  /* 旋转编码器引脚设置(旋钮中断配置在按下按键之后使能) */

  //P2SEL = 0x00;                        //SB
  //P2IE  |= 0x80;                       //允许P2.7中断
  //P2IFG = 0x00;
  //P2IES |= 0x80;                       //下降沿中断  
  /* MCP2515 引脚配置 */  
  P3SEL  = 0x0e;                       // P3.1,P3.2,P3.3选择引脚为外围功能模块
  P3DIR |= 0x11;                      // P3.4,P3.0
  P3OUT |= 0x10;
  
  P2SEL = 0x00;                        //SB
  P2DIR = 0x00;                       //P2.7设置成输入模式
  P2IE  = 0x80;                       //允许P2.7中断
  P2IES = 0x80;                       //下降沿中断 
  P2IFG = 0x00;

}
/*******************************************************************
* 函数功能: SPI0端口初始化,用于驱动CAN 接口芯片
*******************************************************************/
void SPI0Init(void)
{
    U0CTL |= SWRST;
    U0CTL |= ( CHAR | MM | SYNC );      //8位数据、主模式、SPI模式。
    U0TCTL |= ( STC | SSEL1 | CKPL );         //三线模式 | CKPL
    U0BR0  = 0x08;
    U0BR1  = 0x00;                      //8
    U0MCTL = 0X00;                      //SPI模式下U0MCTL设为0  
    ME1 |= USPIE0;                      //允许SPI1模块
    U0CTL &= ~SWRST;
                     
}
/* 延时函数 延时单位 us */
void delay(u32_t delaytime)            
{
  u32_t n;
  for(n=0;n<delaytime;n++);
}
/* PORT2 中断 CAN*/
#pragma vector = PORT2_VECTOR
__interrupt void PORT2_Event(void)
{
  unsigned char Flag = 0;
 if( stateMachine== IDLE)            // 避免各个状态机之间出现时序冲突
  {             
      P2IE  =  0x00;
      if(P2IFG & BIT7)   
      {
        MCP2515_ReadSeqReg(RXB0D0,StoreData,6); //要读取是何种中断,并进行处理如读取数据等。          
        MCP2515_WriteReg(CANINTF, 0x00);        //清所有中断标志
        Flag = MCP2515_ReadReg(CANINTF);
        while(Flag)
        {
             MCP2515_WriteReg(CANINTF, 0x00); 
             Flag = MCP2515_ReadReg(CANINTF);
        }
      }     
      stateMachine = IDLE;                      //应该发送旋钮值
  }
  P2IFG = 0x00;
  P2IE |= 0x80; 

}

⌨️ 快捷键说明

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