本帖最后由 zhaohualiang 于 2012-8-13 16:59 编辑
想用51单片机控制DAC输出模拟电压,单片机选用stc11f32xe,dac选用max517,运行程序后没有电压输出,一直是0V。VEF电压为2.5v.
下面是测试程序:
/*****************************************************************************************/
//DAC:MAX517 起始条件子函数
/*****************************************************************************************/
void DAC_Start(void)
{
SDA=1;
nop();
SCL=1;
nop();
SDA=0;
nop();
}
/*****************************************************************************************/
//DAC:MAX517 停止条件子函数
/*****************************************************************************************/
void DAC_Stop(void)
{
SDA=0;
nop();
SCL=1;
nop();
SDA=1;
nop();
}
/*****************************************************************************************/
//DAC:MAX517 应答子函数
/*****************************************************************************************/
void DAC_Ack(void)
{
SDA=0;
nop();
SCL=1;
nop();
SCL=0;
}
/*****************************************************************************************/
//DAC:MAX517 发送数据子程序,Data为要发送的数据
/*****************************************************************************************/
void DAC_Send(uchar Data)
{
uchar BitCounter=8;//位控制
uchar temp;//中间变量控制
do
{
temp=Data;
SCL=0;
nop();
if((temp&0x80)==0x80)//如果最高位是1
SDA=1;
else
SDA=0;
SCL=1;
temp=Data<<1;//左移
Data=temp;
BitCounter--;
}
while(BitCounter);
SCL=0;
}
/*****************************************************************************************/
//DAC:MAX517 读一个字节的数据,并返回该字节值
/*****************************************************************************************/
uchar DAC_Read(void)
{
uchar temp=0;
uchar temp1=0;
uchar BitCounter=1;
SDA=1;
do
{
SCL=0;
nop();
SCL=1;
nop();
if(SDA)
temp=temp|0x01;
else
temp=temp&0xfe;
if(BitCounter-1)
{
temp1=temp<<1;
temp=temp1;
}
BitCounter--;
}
while(BitCounter);
return(temp);
}
void main(void)
{
DAC_Start();
DAC_Send(0x5a);
DAC_Ack();
while(DAC_Read()!=0);
DAC_Send(0x00);
DAC_Ack();
while(DAC_Read()!=0);
DAC_Send(0xff);
DAC_Stop();
while(1);
} |