我是用金得通仿真机仿真的,ad7705的晶振是用的4.9152,2.5V基准电压供给.
AD7705接P1口调试的时候,AD7705转换结束标志引脚DRDY一直没有没有低电平, 我手动输入命令使DRDY=0时读到的为0xFFFF,AD7705好象一直都没有工作.
AD7705接串口写程序调试DRDY也一直没有没有低电平.请大家帮我看看那里出的问题.
我写的程序是这样的:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dout=P1^5;
sbit drdy=P1^4;
sbit clk=P1^6;
//延时
void wait(uchar t)
{ for(;t>0;t--); }
//延时
void Delay(uchar ms)
{ uchar s;
for(;ms>0;ms--) {for(s=0;s<124;s++); }
}
//写数据
void Write(uchar com)
{ uchar i;
clk=1;
for(i=0;i<8;i++)
{
clk=0;
dout=(bit)(com&0x80);
wait(1);
clk=1;
wait(1);
com=com<<1;
}
clk=1;dout=1; //结束
}
//读数据
AdRd()
{
uchar i;
uint Ad16;
clk=1;
Ad16=0x00;
while(drdy!=0);//等待drdy=0
for(i=0;i<16;i++)
{
Ad16=Ad16<<1;
clk=0;
wait(1);
if(dout)
Ad16++;
clk=1;
wait(1);
}
clk=1;dout=1; //结束
return(Ad16);
}
//对采样通道初始化,所有的控制数据都已经倒序
void Init7705()
{
uchar t; //防止接口迷失
clk=1;
dout=1;
for(t=0;t<100;t++)
{
clk=0;
clk=1;
} //防止接口迷失
Delay(1); //延时1ms
Write(0x20); //写20通道1,下一个写时钟寄存器
Write(0x0c); //写0c到时钟寄存器设置更新率为250HZ,未禁止OUT引脚,4。9152晶振
Write(0x10); //写10通道1,下一个写设置寄存器
Write(0x46); //写46到设置寄存器,设置成自效准,增益1,单极性,有缓冲,滤波器工作
}
void main()
{
uint dataout;
Init7705(); //初始化AD7705
Write(0x38); //写AD7705指向数据寄存器
dataout=AdRd(); //读AD7705
}