这是我自己编的一个TLV5616的DA转换个程序,

2019-07-15 16:53发布


#include "msp430x14x.h"

#define SCLK_OUT P3DIR|=BIT0;
#define DIN_OUT  P3DIR|=BIT1;
#define CS_OUT   P3DIR|=BIT2;
#define FS_OUT   P3DIR|=BIT3;

#define SCLK_H   P3OUT|=BIT0;
#define SCLK_L   P3OUT&=~BIT0;
#define DIN_H    P3OUT|=BIT1;
#define DIN_L    P3OUT&=~BIT1;
#define CS_H     P3OUT|=BIT2;
#define CS_L     P3OUT&=~BIT2;
#define FS_H     P3OUT|=BIT3;
#define FS_L     P3OUT&=~BIT3;

void delay(void);
void WRITE1byte(unsigned int data);
void WRITE0(void);
void WRITE1(void);
void SPI_STOP(void);
void SPI_START(void);
void IO(void);

int main( void )
{
  P1DIR = 0XFF;P1OUT = 0XFF;
  P2DIR = 0XFF;P2OUT = 0XFF;
  P3DIR = 0XFF;P3OUT = 0XFF;
  P4DIR = 0XFF;P4OUT = 0XFF;
  P5DIR = 0XFF;P5OUT = 0XFF;
  P6DIR = 0XFF;P6OUT = 0XFF;
  //unsigned int i;
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
/*
  BCSCTL1&=~XT2OFF;//打开时钟震荡
  do
  {
    IFG1&=~OFIFG;
    for(i=0xff;i>0;i--);
  }
  while((IFG1&OFIFG)!=0);
  BCSCTL2=SELM_2;
*/
  IO();
  SPI_START();
  WRITE1byte(0x4fff);
  //SPI_STOP();
  for(;;)
  {
  }
}
void IO(void)//io设置
{
  SCLK_OUT;
  DIN_OUT;
  CS_OUT;
  FS_OUT;
}
void SPI_START(void)//开启
{
  CS_H;
  FS_H;
  delay();
  CS_L;
  delay();
  FS_L;
  delay();
}
void SPI_STOP(void)//停止
{
  CS_L;
  FS_L;
  delay();
  FS_H;
  delay();
  CS_H;
  delay();
}
void WRITE1(void)//写入1
{
  SCLK_H;
  DIN_H;
  delay();
  SCLK_L;
  delay();
  //SCLK_L;
  //delay();
}
void WRITE0(void)//写入0
{
  SCLK_H;
  DIN_L;
  delay();
  SCLK_L;
  delay();
  //SCLK_L;
  //delay();
}
void WRITE1byte(unsigned int data)
{
  unsigned int n;
  for(n=16;n>0;n--)
  {
    if(data&0x8000)
      WRITE1();
    else
      WRITE0();
    data<<=1;
    delay();
  }
}
void delay(void)//延时
{
    unsigned char i;

    for(i = 0;i < 100;i++)
        _NOP();
}       

这是我自己编的一个TLV5616的DA转换个程序,但是始终都没输出,为什么呢?求大神帮忙啊,,,,,,,,,,,,

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
wangbinlong
2019-07-15 22:01
#include <msp430x14x.h> #define uchar unsigned char  #define uint unsigned int     #define SCLK_UP    P5OUT |= BIT1               //SCLK高电平  #define SCLK_DOWN  P5OUT &= ~BIT1               //SCLK低电平 #define FS_UP    P5OUT |= BIT2                 // FS高电平 #define FS_DOWN  P5OUT &= ~BIT2                //FS低电平 #define Data_UP    P5OUT |= BIT0              //数据位1 #define Data_DOWN  P5OUT &= ~BIT0            //数据位0 #define SCLK_OUT P5DIR |= BIT1 #define SCLK_IN  P5DIR &= ~BIT1 #define FS_OUT   P5DIR |= BIT2 #define FS_IN    P5DIR &= ~BIT2 #define Data_OUT P5DIR |= BIT0 #define Data_IN  P5DIR &= ~BIT0  void DA(float temp);      void set_io(void) {   SCLK_OUT;   Data_OUT;   FS_OUT;   SCLK_UP;   FS_UP; }  void start(void) {   FS_UP;   _NOP();   FS_DOWN; }  void stop(void) {   FS_UP; }  void Write1(void) {   SCLK_UP;   Data_UP;   SCLK_DOWN; }  void Write0(void) {   SCLK_UP;   Data_DOWN;   SCLK_DOWN; }  void main()    {      /*下面六行程序关闭所有的IO口*/     P1DIR = 0XFF;P1OUT = 0XFF;        P2DIR = 0XFF;P2OUT = 0XFF;        P3DIR = 0XFF;P3OUT = 0XFF;       P4DIR = 0XFF;P4OUT = 0XFF;        P5DIR = 0XFF;P5OUT = 0XFF;        P6DIR = 0XFF;P6OUT = 0XFF;          WDTCTL=WDTPW+WDTHOLD;                    //关闭看门狗      set_io();   while(1)       {              DA(1.80);           }  }    void DA(float temp)   {            int data;             uchar DA_ON[4]={1,1,0,1};            //控制位           int i,j;               data=(int)(temp*4096/2.745);           start();          for(i=0;i<4;i++)               {                             if(DA_ON[i])                      Write1();                                 else                        Write0();                                                     }          //写入四位的数据信息          for(j=12;j>0;j--)             {                                                                      if(data&0x800)                       //高位是1;                    Write1();                                           else                      Write0();                        //P3.2OUT0                   data<<=1;              }           stop();  }

一周热门 更多>