AD7705的DRDY引脚一直为高电平
各位大哥大姐帮下忙谢谢了先!
DRDY一直为高电平,AD7705似乎没有工作
#include<stc89c58.h>
#include<intrins.h>
sbit addata = P3^0 ;
sbit sclk = P3^1 ;
sbit drdy = P2^7 ;
sbit LED=P4^1;
sbit AD7705_CS=P2^5; //片选//
sbit AD7705_RESET=P2^4; //复位//
#define uchar unsigned char
#define uint unsigned int
void wrbyt(uchar shu);
int rdbyt( );
void ad7705_init( void ) ;
void delay(uchar t);
/************************************************/
//写一个字节//
void wrbyt( uchar shu )
{
uchar i ;
AD7705_CS=0; // CS ON
sclk=1;
_nop_();
_nop_();
for(i=0;i<8;i ++)
{
addata=(bit)(shu&0x80);
sclk = 0 ;
_nop_();
_nop_();
_nop_();
sclk = 1 ;
shu = shu<<1 ;
}
_nop_();
AD7705_CS=1; //CS OFF
}
/************************************************/
//读一个字//
int rdbyt( void )
{
int temp ;
uchar j ;
AD7705_CS=0; // CS ON
sclk=1;
_nop_();
for(j=0;j<8;j++)
{
sclk = 0 ;
_nop_();
_nop_();
temp = temp<<1;
temp|=(uchar)addata;
_nop_();
_nop_();
sclk =1;
_nop_();
_nop_();
}
_nop_();
AD7705_CS=1; // CS OFF
drdy=1;
return (temp ) ;
}
/************************************************/
//初始化AD7705//
void ad7705_init( void )
{
wrbyt( 0x20 ) ;
wrbyt( 0x0C) ; //写时钟寄存器//
wrbyt( 0x10 ) ;
wrbyt( 0x44 ) ; //写设置寄存器//
}
/************************************************/
//主函数//
void main()
{
uint v_temp ;
AD7705_RESET=1;
ad7705_init() ;
while( 1 )
{
while(drdy);
wrbyt( 0x38 ) ;
//addata=1; //每次写操作后保证DIN为高电平//
v_temp = rdbyt() ;
delay(50);
sclk=1;
addata=1; //防止误读//
}
}
真的很不错,受用了
我也遇到了,不过有时候能读出来,但是读出来都是30000多以上,即使输入接地也有这么多,不知道什么情况