基于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;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ESCracker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值