sbit addata = p2^0 ;
sbit sclk = p2^1 ;
sbit drdy = p3^7 ;
void ad_sta( void ) ;
void ad_delay_5us( void ) ;
void wrbyt(uchar shu);
int rdbyt( );
void ad7705_init( void ) ;
void ad_sta( void )
{
sclk = 1 ;
ad_delay_5us() ;
sclk = 0 ;
}
void ad_delay_5us( void )
{
uchar n ;
for( n = 0 ; n < 10 ; n ++ )
;
}
void wrbyt( uchar shu )
{
uchar i ;
for( i = 0 ; i < 8 ; i ++ )
{
if( ( shu&0x80 ) > 0 )
{
addata = 1 ;
sclk = 1 ;
ad_delay_5us() ;
sclk = 0 ;
addata = 0 ;
}
else
{
addata = 0 ;
sclk = 1 ;
ad_delay_5us() ;
sclk = 0 ;
}
shu = shu < < 1 ;
}
}
int rdbyt( void )
{
int temp ;
uchar j ;
for( j = 0 ; j < 16 ; j ++ )
{
addata = 1 ;
sclk = 1 ;
ad_delay_5us() ;
temp = temp < < 1;
if( addata == 1 )
temp = temp | 0x01; //if receive a 1,then the last one of the num is 1
else
temp = temp & 0xfe ; //else the last one is 0
sclk =0;
}
return temp ;
}
void ad7705_init( void )
{
ad_sta() ;
wrbyt( 0x21 ) ;
wrbyt( 0x04 ) ;
wrbyt( 0x11 ) ;
wrbyt( 0x44 ) ;
}
void main()
{
float v , v_temp ;
ad7705_init() ;
drdy = 1 ;
while( 1 )
{
while( drdy == 1 ) ;
wrbyt( 0x39 ) ;
v_temp = rdbyt() ;
}
}