AD7705的操作
我现在使用外部TL431(2.5V基准电压),电源电压为5V,外接晶体振荡器2.4576MHz,电路如下:
程序如下:
-------------------------- AD7705.H -----------------------------------
#ifndef _AD7705_H_
#define _AD7705_H_
// 引脚定义
sbit AD7705_SCLK = P2^4;
sbit AD7705_DRDY = P2^5;
sbit AD7705_DOUT = P2^6;
sbit AD7705_DIN = P2^7;
// 通讯寄存器地址定义
#define WR_SETUP_REG 0x10 //选中设置寄存器,写
#define RD_SETUP_REG 0x18 //选中设置寄存器,读
#define WR_CLOCK_REG 0x20 //选中时钟寄存器,写
#define RD_DATA_REG 0x38 //选中数据寄存器,读
#define WR_OFFSET_REG 0x60 //选中offt寄存器,写
#define RD_OFFSET_REG 0x68 //选中offt寄存器,读
#define WR_FULL_REG 0x70 //选中full scale寄存器,写
#define RD_FULL_REG 0x78 //选中full scale寄存器,读
#define SYS_ZERO_CALI 0x80 //系统零校准模式
#define SYS_FULL_CALI 0xC0 //系统满量程校准模式
#define ZERO_CALIBRATION 0x00 //系统零校准
#define FULL_CALIBRATION 0x01 //系统满量程校准
#define CLOCK_REG_SET 0x04 //CLOCK寄存器设置,无分频,50HZ输出更新速率吸血鬼日记第三季结局
#define DELAY() {_nop_();_nop_();_nop_();}
// 函数声明
void AD7705_Init(void);
void AD7705_Ret(void);
void AD7705_Start(void);
uchar AD7705_ReadByte(void);
void AD7705_WritByte(uchar d);
float AD7705_ReadVol(void);
#endif
-------------------------- AD7705.C -----------------------------------
//****************************************************************************
//功能:AD7705串行接口失步后将其复位。复位后要延时500us再访问
//参数:无
//返回:无
//备注:
//****************************************************************************
void AD7705_Ret(void)
{
uchar data i;
for( i=0; i<36; i++ )
{
AD7705_SCLK = LOW;
AD7705_DIN = HIGH; // DIN端口连续写36个周期的高电平,保证复位
DELAY();
AD7705_SCLK = HIGH;
DELAY();
}
DelayMS(1); // 复位之后等待1MS
}
//****************************************************************************
//功能:从AD7705读一个字节的数据
//参数:无
//返回:读到的一字节数据
//备注:无
//****************************************************************************
uchar AD7705_ReadByte(void)
optium{
wellsfargo
关联词 uchar idata i, d=0;
// 读数据,高位在前
for( i=0; i<8; i++ )
{
d <<= 1;
AD7705_SCLK = LOW;
DELAY();
if(AD7705_DOUT) d++;
AD7705_SCLK = HIGH;
DELAY();
}
return d;
}
//****************************************************************************
//功能:往AD7705写1个字节数据
//参数:要写入AD7705的数据
//返回:无
//备注:无
//****************************************************************************
void AD7705_WriteByte(uchar d)
{
uchar idata i;
for(i=0; i<8; i++)
{
AD7705_SCLK = LOW;
if(d & 0x80)
AD7705_DIN = HIGH;
成长的烦恼英文版下载 el
AD7705_DIN = LOW;
during怎么读 DELAY();
AD7705_SCLK = HIGH;
DELAY();
d <<= 1;
}
}
//------------------------------------------------------------------------------------------
//功能:先写offt寄存器,再写full scale寄存器,然后启动7705进行单次转换
//参数:
//返回:无
//备注:
//------------------------------------------------------------------------------------------pfw
void AD7705_Start(void)
{
// 复位,防止接口迷失
AD7705_Ret();
// 复位之后一定要重新设置各寄存器,复位之后默认状态为等待对通信寄存器的一次操作
// 遵循先写命令,后写数据的原则,命令默认写到通信寄存器
//写OFFSET寄存器
AD7705_WriteByte(WR_OFFSET_REG);
AD7705_WriteByte(0xFF);
AD7705_WriteByte(0xFF);
AD7705_WriteByte(0xFF);
AD7705_WriteByte(0xFF);
//写满量程校准寄存器
AD7705_WriteByte(WR_FULL_REG);
AD7705_WriteByte(0xFF);
AD7705_WriteByte(0xFF);
AD7705_WriteByte(0xFF);logogo
AD7705_WriteByte(0xFF);
AD7705_WriteByte(WR_CLOCK_REG); // next write to clock reg,AIN1, 0010 0000
AD7705_WriteByte(0x00); // CLKDIS=0,CLKDIV=0,CLK=0,FS1=0,FS2=0 0001 0000
AD7705_WriteByte(WR_SETUP_REG); // next write to tup reg,AIN1 0001 0000
AD7705_WriteByte(0x04); // 正常状态启动装换,GAIN=1,B/U=0,BUF=0,FSYNC=0,增益=1,双极性
}
void AD7705_Init(void)
{
// 复位,防止接口迷失
流行英文名字 AD7705_Ret();
em用法 AD7705_WriteByte(WR_CLOCK_REG); // next write to clock reg,AIN1, 0010 0000
AD7705_WriteByte(0x10); // CLKDIS=0,CLKDIV=0,CLK=0,FS1=0,FS2=0 0001 0000
// 外部主时钟频率为2.4576MHz