这是我当初毕业设计的程序可以直接用的包含两个文件:
AD7705.H文件:
#include <reg51.h>
#ifndef _AD7705_
#define _AD7705_
sbit AD7705_CLK = P3^6; //AD7705时钟
sbit AD7705_DIN = P3^4; //AD7705数据输入端
sbit AD7705_DOUT = P3^3; //AD7705数据输出端
sbit AD7705_DRDY = P3^2; //AD770准备好信号
sbit AD7705_REST = P3^5; //AD7705复位信号,低电平复位
#endif
extern unsigned int AD_data;
extern void Write_7705(unsigned char Byte);
extern void Read_7705();
extern void Init_7705();
AD7705.C文件:
#include<includes.h>
#define nop _nop_()
unsigned int AD_data;
void Write_7705(unsigned char Byte)
{
unsigned char i;
AD7705_CLK = 1;
for(i=8;i>0;i--)
{
if(Byte&0x80) AD7705_DIN = 1;
else AD7705_DIN = 0;
AD7705_CLK = 1;
nop;
AD7705_CLK = 0;
nop;
AD7705_CLK = 1;
Byte <<= 1;
}
AD7705_CLK = 1;
nop;
AD7705_DIN = 0;
}
/********************************************************************
**函数原形:uint Read_7705()
**功能:读AD7705转换后数据
**参数:无
**返回值:转换结果
********************************************************************/
void Read_7705(void)
{
unsigned char i,j,k=400;
long int sum_data=0;
for(j=0;j<4;j++) //采集8次
{
Write_7705(0x39);
AD7705_CLK=1;
while(AD7705_DRDY&&(k--)) ;
// Display();
for(i=16;i>0;i--) //读16位数据
{
AD_data=AD_data<<1;
AD7705_CLK=0;
nop;
AD7705_DOUT=1;
if(AD7705_DOUT) AD_data|=0x0001;
else AD_data|=0x0000;
AD7705_CLK=1;
}
AD7705_CLK=1;
nop;
AD7705_DIN=1;
sum_data+=AD_data;
AD_data=0x0000;
}
AD_data=(sum_data>>2);
}
/*********************************************************
**函数原形: void Init_7705(void)
**功能:初始化AD7705,设置为20HZ更新率、双极性、自校准、增益128
**参数:无
**返回值:无
***********************************************************/
void Init_7705(void) //初始化7705
{
unsigned char i;
AD7705_CLK=1;
nop;
AD7705_DIN=1;
for (i=0;i<40;i++) // AD7705复位
{
AD7705_CLK=0;
nop;
AD7705_CLK=1;
}
Write_7705(0x21); //写通信寄存器设置通道2择下一个操作是写时钟寄存器
Write_7705(0x0C); //写时钟寄存器设置更新速率为20Hz
Write_7705(0x11); //通道2,下一个写设置寄存器
//Write_7705(0x7a); //写设置寄存器,设置成双极性、增益为128、自校
Write_7705(0x44);
} |