基於MSP430編寫的TPIC6B595功率芯片驅動程序

/*這個程序是在MSP430上通過查閱TPIC6B595芯片手冊編寫的,這款芯片是一種驅動功率放大芯片,
可以控制開關繼電器,當初之所以用這個,就是因爲芯片直接輸出功率不夠,沒有辦法讓繼電器完
全關斷(雖然繼電器指示燈滅了但實際上依然導通),所以添加了這款芯片。這個驅動程序很簡單,
就是手冊上寫的通訊協議,按照要求輸出高低電平就可以。*/
#include "msp430x14x.h"
//------------------------------------------------------------------------------
#define uchar unsigned char
#define uint unsigned int
//------------------------------------------------------------------------------
#define Clr_RCK  P6OUT&=~BIT3                                  //RCK-P6.3輸出置0
#define Set_RCK  P6OUT|= BIT3                                  //RCK-P6.3輸出置1

#define Clr_SRCK  P2OUT&=~BIT0                                //SRCK-P2.0輸出置0
#define Set_SRCK  P2OUT|= BIT0                                //SRCK-P2.0輸出置1
 
#define Clr_SI  P6OUT&=~BIT2                                    //SI-P6.2輸出置0
#define Set_SI  P6OUT|= BIT2                                    //SI-P6.2輸出置1
//------------------------------------------------------------------------------
void TPIC_INIT()
{
  Clr_RCK;
  Clr_SRCK;
}
//------------------------------------------------------------------------------
void TPIC_DELAY(int time)
{
  int i;
  while(time--)
  {for(i=0;i<250;i++)
      {
         _NOP();_NOP();_NOP();_NOP();
      }
  }
}
//------------------------------------------------------------------------------
void TPIC_WRITE(char DATA)
{
  uchar j;
  TPIC_INIT();
  for(j=0;j<8;j++)
  {
    if(DATA&0X80) Set_SI;
    else Clr_SI;
    //SRCK發出上升沿信號,將數據存入寄存器
    _NOP();_NOP();
    TPIC_DELAY(1);
    //-------------
    Clr_SRCK;
    //-------------
    _NOP();_NOP();
    TPIC_DELAY(1);
    //-------------
    Set_SRCK;
    //-------------
    _NOP();_NOP();
    TPIC_DELAY(1);
    DATA <<= 1;
  }
  //RCK發出上升沿信號,寫入數據
  Clr_RCK;
  //-------------
  _NOP();_NOP();
  TPIC_DELAY(1);
  //-------------
  Set_RCK;
  //-------------
  _NOP();_NOP();
  TPIC_DELAY(1);
  //-------------
  Clr_RCK;
}
//------------------------------------------------------------------------------
int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  //設置引腳爲輸出
  P6DIR|=BIT3;                                                      //P6.3爲輸出
  P6DIR|=BIT2;                                                      //P6.2爲輸出
  P2DIR|=BIT0;                                                      //P2.0爲輸出
  //從左到爲1248,0X0_                                       
  TPIC_WRITE(0X05);
  TPIC_DELAY(1000);
  TPIC_WRITE(0X00);
  //
  return 0;
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章