#include "INTRINS.H"
#include"reg51.h"
#include"ADC.h"
sbit AD_SCLK = P1^3;
sbit AD_CS = P1^4;
sbit AD_DIN = P1^0;
sbit AD_DOUT = P1^1;
sbit AD_DRDY = P1^2;
#define Delay2us() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
//=================================================================================================
/******************************************************************
名称:void AD7705_Write_Reg(uchar Data_byte);
功能:写AD7705寄存器
指令:无
调用:无
返回:无
/******************************************************************/
void AD7705_Write_Reg(UINT8 Data_byte)
{
UINT8 i;
AD_CS=0;
Delay2us()
AD_SCLK = 0;
Delay2us()
for(i = 0; i < 8; i++)
{
AD_SCLK = 0;
if(Data_byte & 0x80)AD_DIN = 1;
else
AD_DIN = 0;
Delay2us()
AD_SCLK = 1;
Data_byte <<= 1;
}
Delay2us()
AD_CS=1;
}
/******************************************************************
名称:uchar AD7705_Read_Reg();
功能:读AD7705寄存器
指令:无
调用:无
返回:Data_read
/******************************************************************/
UINT8 AD7705_Read_Reg(void)
{
UINT8 i,Data_read;
UINT16 j;
AD_SCLK = 1;
Delay2us()
AD_DRDY=1;
for(j=0;j<10000;j++)if(AD_DRDY)break;
Delay2us()
AD_CS=0;
for(i = 0; i < 8; i++)
{
AD_SCLK = 0;
Delay2us()
Data_read <<= 1;
AD_SCLK = 1;
if(AD_DOUT)
Data_read = Data_read|0x01;
else
Data_read = Data_read&0xfe;
Delay2us()
Delay2us()
}
Delay2us()
AD_DRDY = 1;
AD_CS=1;
return(Data_read);
}
//===================================================================
//===================================================================
void AD7705_Start(UINT8 temp )
{
if(temp==1)
{
AD7705_Write_Reg(0x21); //选择时钟寄存器,写寄存器,正常模式
AD7705_Write_Reg(0x08); //时钟寄存器,二分频,主频2.4576MHz,所以CLK=0;
AD7705_Write_Reg(0x11); //选择设置寄存器,写寄存器,正常模式
AD7705_Write_Reg(0x70); //自校准,增益为1,单极性
}
else
{
AD7705_Write_Reg(0x20); //选择时钟寄存器,写寄存器,正常模式
AD7705_Write_Reg(0x08); //时钟寄存器,二分频,主频2.4576MHz,所以CLK=0;
AD7705_Write_Reg(0x10); //选择设置寄存器,写寄存器,正常模式
AD7705_Write_Reg(0x78); //自校准,增益为1,单极性
}
}
//====================================================================================
void AD7705_Reset(UINT8 temp)
{
UINT8 i;
AD_DIN=1;
for(i=1;i<=50;i++)
{
Delay2us()
AD_SCLK = !AD_SCLK;
Delay2us()
}
AD7705_Start(temp);
}
|