/*這個程序是在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;
}