⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad7705.c

📁 AD7705驱动程序
💻 C
字号:
/////////////////////////////////////////////////////////////////////////////
////Copyright (c) 2008,重庆大唐测控系统有限公司
////All rights reserved. 
////
////文件名称:AD7705.C 
////摘    要:
////         1、使用2.4576M晶体
////         2、先复位芯片  adc_rest() 
////         3、再初始化芯片  adc1_init() 
////         4、读取一个通道的AD值 adc1_read_value()
/////////////////////////////////////////////////////////////////////////////
////当前版本:1.1.2
////作    者:yangxd
////完成日期:2008-11-23
/////////////////////////////////////////////////////////////////////////////

#include "AD7705.h"

/************************************************
功能:延时
参数:循环次数
返回:无      
************************************************/
void adc_delay(unsigned char NUM)			
	{
		for(;NUM>0;NUM--);		 
	}
/************************************************
功能:写入AD芯片一个字节
参数:要写入的命令或参数
返回:无 
************************************************/
void write_adc_byte(unsigned char chr)
{
	unsigned char i;

	for(i=0;i<8;i++)
	{
		ADC_CLK= 0;
		chr=chr<<1;
		ADC_DI= CY;
		ADC_CLK= 1;
	}
	ADC_CLK = 1;
}
/************************************************
功能:从AD芯片读取一个字(16位)
参数:无
返回:读取的字(16位)
************************************************/
unsigned int read_adc_word()
{
	unsigned char i;
	unsigned int coder = 0;

	for(i=0;i<16;i++)
	{
		ADC_CLK = 0;
		coder = coder<<1;
		if(ADC_DO)coder+=1;		
		ADC_CLK = 1;
	}
	ADC_CLK = 1;
	return(coder);
}
/************************************************
功能:AD芯片复位
参数:无
返回:无
************************************************/
void adc_rest()
{
	unsigned char i,j;

	ADC_DI  = 1;
	ADC_CLK = 1; 
	ADC1_CS = 1;
	ADC2_CS = 1;
	
	ADC_RESET = 0;
	for(i=200;i>0;i--)
		for(j=200;j>0;j--);	
	ADC_RESET = 1;
}
/************************************************
功能:AD芯片初始化
参数:calmode      工作模式选择(如:ADC_SELF  ……)
      gainsetting  输入增益选择(如:ADC_GAIN_128  ……)
      operation    单极性/双极性(如:ADC_BIPOLAR  ……) 
      rate         输出更新率(如:ADC_50  ……)
返回:无
************************************************/
void adc1_init(unsigned char calmode, unsigned char gainsetting, unsigned char operation, unsigned char rate)
{
	ADC1_CS = 0;
	write_adc_byte(0xFF);
	write_adc_byte(0xFF);
	write_adc_byte(0xFF);
	write_adc_byte(0xFF);
	ADC1_CS = 1;
	adc_delay(100);

	ADC1_CS = 0;
	write_adc_byte( 0x20 );//
	ADC1_CS = 1;
	adc_delay(100); 

	ADC1_CS = 0;
	write_adc_byte( rate );//
	ADC1_CS = 1;
	adc_delay(100);

	ADC1_CS = 0;
  	write_adc_byte( 0x10 );//
  	ADC1_CS = 1;
	adc_delay(100);

	ADC1_CS = 0;
	write_adc_byte( calmode|gainsetting|operation);//
	ADC1_CS = 1;
	adc_delay(100);
}
/************************************************
功能:读取AD转换码
参数:通道号   如:1、2
返回:读取的AD转换结果(如果等于零表示正忙)
************************************************/
unsigned int adc1_read_value(unsigned char ch)
{
unsigned int  value;
	if(!ADC1_DRDY)
	{
		ADC1_CS = 0;
		if(ch == 1)
      			write_adc_byte(0x38);//
   		else if(ch == 2)
      			write_adc_byte(0x39);//
		else    {ADC1_CS = 1;return 0;}
		ADC1_CS = 1;
		adc_delay(1);
		ADC1_CS = 0;
		value = read_adc_word();
		ADC1_CS = 1;
		return value;
	}
	else
	{
		return 0;
	}
}
/************************************************
功能:AD芯片初始化
参数:calmode      工作模式选择(如:ADC_SELF  ……)
      gainsetting  输入增益选择(如:ADC_GAIN_128  ……)
      operation    单极性/双极性(如:ADC_BIPOLAR  ……) 
      rate         输出更新率(如:ADC_50  ……)
返回:无
************************************************/
void adc2_init(unsigned char calmode, unsigned char gainsetting, unsigned char operation, unsigned char rate)
{
	ADC2_CS = 0;
	write_adc_byte(0xFF);
	write_adc_byte(0xFF);
	write_adc_byte(0xFF);
	write_adc_byte(0xFF);
	ADC2_CS = 1;
	adc_delay(100);

	ADC2_CS = 0;
	write_adc_byte( 0x20 );//
	ADC2_CS = 1;
	adc_delay(100);
	ADC2_CS = 0;
	write_adc_byte( rate );//
	ADC2_CS = 1;
	adc_delay(100);
	ADC2_CS = 0;
  	write_adc_byte( 0x10 );//
  	ADC2_CS = 1;
	adc_delay(100);
	ADC2_CS = 0;
	write_adc_byte( calmode|gainsetting|operation);//
	ADC2_CS = 1;
	adc_delay(100);
}
/************************************************
功能:读取AD转换码
参数:通道号   如:0、1
返回:读取的AD转换结果(如果等于零表示正忙)
************************************************/
unsigned int adc2_read_value(unsigned char ch)
{
unsigned int  value;
	if(!ADC2_DRDY)
	{
		ADC2_CS = 0;
		if(ch == 1)
      			write_adc_byte(0x38);//
   		else if(ch == 2)
      			write_adc_byte(0x39);//
		else    {ADC1_CS = 1;return 0;}
		ADC2_CS = 1;
		adc_delay(1);
		ADC2_CS = 0;
		value = read_adc_word();
		ADC2_CS = 1;
		return value;
	}
	else
	{
		return 0;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -