我的 程序没问题的,网上有现成的,我也看了,跟我自己写的差不多,但是输出电压通道A和B都是0,纳闷啊,参考电压我选3.3V
,用REF3033提供的参考电压,程序如下
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DIN=P1^1;
sbit SCLK=P1^2;
sbit CS=P1^3;
#define chanel_A 1
#define chanel_B 2
#define chanel_AB 3
//*******写16位数据**************************************
void DA_Write_Byte(uchar date)
{
uchar i;
SCLK=1;
CS=0;
for(i=0;i<16;i++)
{
if(date&0x8000)
{
DIN=1;
}
else
{
DIN=0;
}
SCLK=0;
_nop_();
date=date<<1;
SCLK=1;
_nop_();
}
SCLK=1;
CS=1;
}
//***********模式选择,通道选择,数据转换***************************************************
void Write_Tlv5618(uchar Data_A,uchar Data_B,uchar mode,uchar chanel)
{
uchar Temp;
if(mode)
{
Temp=0x4000;
}
else
{
Temp=0x0000;
}
switch(chanel)
{
case chanel_A:
DA_Write_Byte(0x8000|Temp|(Data_A&0x0fff)); break;
case chanel_B:
DA_Write_Byte(0x0000|Temp|(Data_B&0x0fff)); break;
case chanel_AB:
DA_Write_Byte(0x1000|Temp|(Data_B&0x0fff)); break; //写数据到缓冲器
DA_Write_Byte(0x8000|Temp|(Data_A&0x0fff)); break; //写数据到A,同时更新B
default: break;
}
}
void Test()
{
Write_Tlv5618(0x0fff,0x0000,1,chanel_A);
}
void main()
{
Write_Tlv5618(0x0fff,0x0fff,1,chanel_AB);
}
电路图在附件里