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