我是用金得通仿真机仿真的,ad7705的晶振是用的4.9152,2.5V基准电压供给. AD7705接P1口调试的时候,AD7705转换结束标志引脚DRDY一直没有没有低电平, 我手动输入命令使DRDY=0时读到的为0xFFFF,AD7705好象一直都没有工作. AD7705接串口写程序也不行.请大家帮我看看那里出的问题. 我写的程序是这样的: #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 } |