这是我当初毕业设计的程序可以直接用的包含两个文件: 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); }
|