已回答假定已回答

AD5260 使用问题

songguoda 在 2013-4-27 詢問的問題
最後回覆由songguoda於2013-5-4提供

纠结了好几天,程序硬是不通

头文件

#ifndef _AD5260_H_

#define _AD5260_H_

 

//M64管脚定义

#define AD5260_CS           5        //PF5 

#define AD5260_SDI          3        //PF3

#define AD5260_CLK          4        //PF4

#define AD5260_SDO          6        //PF6

 

//宏定义

#define CS_L  PORTF&=~(1<<AD5260_CS)       //置CS为低电平,使能SPI接口,使能AD5260 SPI通讯

#define CS_H  PORTF|= (1<<AD5260_CS)       //置CS为高电平,关闭SPI接口,关断AD5260 SPI通讯

 

#define CLK_L PORTF&=~(1<<AD5260_CLK)    //SPI总线时钟线

#define CLK_H PORTF|=(1<<AD5260_CLK)

#define SDI_L PORTF&=~(1<<AD5260_SDI)    //SPI总线数据线

#define SDI_H PORTF|=(1<<AD5260_SDI)

//#define SDO_L PORTF&=~(1<<AD5260_SDO)    //SPI总线数据线

//#define SDO_H PORTF|=(1<<AD5260_SDO)

 

extern void Write_Byte(uchar data);

 

#endif

 

源文件

 

#include "main.h"

#include "ad5260.h"

 

void Write_Byte(uchar data)

{

  uchar i,data1;

  DDRF|=(1<<AD5260_CS)|(1<<AD5260_CLK)|(1<<AD5260_SDI);

  DDRF&=~(1<<AD5260_SDO);

  PORTF|= (1<<AD5260_SDO);

  data1=data; 

 

 

  CS_H;

 

  delay_us(1);

       

  CS_L;

 

 

CLK_L;

 

 

for(i=0;i<8;i++)

{

    if(data1&0x80)         

  {

   SDI_H;

  }

  else                                 

  {

   SDI_L;

  }

  

  CLK_H;

  delay_us(1);

  CLK_L;               

  data1=data1<<1;

  delay_us(1);

}

 

 

 

CS_H;

delay_us(1);

 

}

結果