這是我當(dāng)初畢業(yè)設(shè)計的程序可以直接用的包含兩個文件: AD7705.H文件:
#include <reg51.h>
#ifndef _AD7705_ #define _AD7705_ sbit AD7705_CLK = P3^6; //AD7705時鐘 sbit AD7705_DIN = P3^4; //AD7705數(shù)據(jù)輸入端 sbit AD7705_DOUT = P3^3; //AD7705數(shù)據(jù)輸出端 sbit AD7705_DRDY = P3^2; //AD770準(zhǔn)備好信號 sbit AD7705_REST = P3^5; //AD7705復(fù)位信號,低電平復(fù)位
#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; }
/******************************************************************** **函數(shù)原形:uint Read_7705() **功能:讀AD7705轉(zhuǎn)換后數(shù)據(jù) **參數(shù):無 **返回值:轉(zhuǎn)換結(jié)果 ********************************************************************/
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位數(shù)據(jù) { 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); }
/********************************************************* **函數(shù)原形: void Init_7705(void) **功能:初始化AD7705,設(shè)置為20HZ更新率、雙極性、自校準(zhǔn)、增益128 **參數(shù):無 **返回值:無 ***********************************************************/
void Init_7705(void) //初始化7705 { unsigned char i; AD7705_CLK=1; nop; AD7705_DIN=1; for (i=0;i<40;i++) // AD7705復(fù)位 { AD7705_CLK=0; nop; AD7705_CLK=1; } Write_7705(0x21); //寫通信寄存器設(shè)置通道2擇下一個操作是寫時鐘寄存器 Write_7705(0x0C); //寫時鐘寄存器設(shè)置更新速率為20Hz Write_7705(0x11); //通道2,下一個寫設(shè)置寄存器 //Write_7705(0x7a); //寫設(shè)置寄存器,設(shè)置成雙極性、增益為128、自校 Write_7705(0x44); }
|