#include <iom32v.h>
#define SET_DACLK sbi(PORTD,6)
#define CLR_DACLK cbi(PORTD,6)
#define OUT_DACLK sbi(DDRD,6)
#define SET_DADIN sbi(PORTD,7)
#define CLR_DADIN cbi(PORTD,7)
#define OUT_DADIN sbi(DDRD,7)
#define SET_DACS sbi(PORTC,7)
#define CLR_DACS cbi(PORTC,7)
#define OUT_DACS sbi(DDRC,7)
//短延时函数:nNop( )
void nNop(uchar i)
{ for(;i>0;i--);
}
//长延时函数:LongDelay( )
void LongDelay(uint i)
{ uint j;
for(;i>0;i--)
{ for(j=1000;j>0;j--);
}
}
//向SPI写16位数据函数:SPIWrite( )
void SPIWrite(unsigned int temp)
{ uint i;
CLR_DACS;
nopdelay(2);
for(i=0;i<16;i++)
{ if(temp&0x8000)
SET_DADIN;
else
CLR_DADIN;
SET_DACLK;
temp<<=1;
nopdelay(6);
CLR_DACLK;
nopdelay(6);
}
SET_DACLK;
nopdelay(12);
CLR_DACLK;
nopdelay(6);
SET_DACS;
}
//设置DAC A(即A通道)输出函数:SetDAC_A( )
//参数DAdata为0~0xfff,是12位数据位的数据,输出电压=2*REF*DAdata/4096 v
void SetDAC_A(unsigned int DAdata)
{
if(DAdata>=0xfff) DAdata=0xfff;
SPIWrite(0xc000+DAdata);
}
//设置DAC B(即B通道)输出函数:SetDAC_B( )
void SetDAC_B(unsigned int DAdata)
{
if(DAdata>=0xfff) DAdata=0xfff;
SPIWrite(0x4000+DAdata);
}
//设置DAC A与DAC B同时输出函数SetDAC_AB( )
void SetDAC_AB(unsigned int DAdataA,unsigned int DAdataB)
{
if(DAdataA>=0xfff) DAdataA=0xfff;
if(DAdataB>=0xfff) DAdataB=0xfff;
SPIWrite(0x5000+DAdataB);
nopdelay(2000);
SPIWrite(0xc000+DAdataA);
}
//端口初始化
void InitDAIO(void)
{ CLR_DACLK;
CLR_DADIN;
SET_DACS;
OUT_DACLK;
OUT_DADIN;
OUT_DACS;
}