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

📄 四通道ad7710程序.txt

📁 四通道AD7710程序 四通道AD7710程序 四通道AD7710程序
💻 TXT
字号:
> ad7710.rar > ad7710.c



/****************************************Copyright (c)************************************************** 
**                                 
**                                    研	发	部 
**                                
** 文   件   名: AD7710.c 
** 最后修改日期: 2007-10-26 9:44 
** 描        述: 四通道AD7710程序 
** 版	     本: V1.0 
** 主  控  芯 片:M32  晶振频率:7.3728MHZ, 波特率115200 
** IDE:ICCAVR 6.31 
**********************************************************************************************************/ 
 
#include 
#include 
#include"define.h" 
#include"function.h" 
 
/********************************************************************** 
functionName:void send24Bit(BYTE *Comm,BYTE chs) 
description:向AD7710指定的通道发送24bit数据,chs:选择通道数,0,1,2,3 
运行时间:73.65us  7.3728MHZ晶振 
**********************************************************************/ 
void send24Bit(BYTE *Comm,BYTE chs) 
{ 
	BYTE i,temp,j; 
	SET_RFS_1; 
	SET_RFS_2; 
	SET_RFS_3; 
	SET_RFS_4; 
	SET_TFS_1; 
	SET_TFS_2; 
	SET_TFS_3; 
	SET_TFS_4; 
	CLR_SCLK; 
	ACCESS_CTL_REG; 
	switch(chs) 
	{ 
		case 0: 
		{ 
			CLR_TFS_1; 
			break; 
		} 
		case 1: 
		{ 
			CLR_TFS_2; 
			break; 
		} 
		case 2: 
		{ 
			CLR_TFS_3; 
			break; 
		} 
		case 3: 
		{ 
			CLR_TFS_4; 
			break;	 
		} 
		default: 
		{ 
			break; 
		} 
	} 
	for(i=0;i<3;i++) 
	{ 
		temp=*(Comm+i); 
		for(j=0;j<8;j++) 
		{ 
			if(temp&0x80) 
			{ 
				SET_SDATA; 
			} 
			else 
			{ 
				CLR_SDATA; 
			} 
			SET_SCLK; 
			NOP();		 
			CLR_SCLK; 
			temp<<=1; 
		} 
	} 
	SET_TFS_1; 
	SET_TFS_2; 
	SET_TFS_3; 
	SET_TFS_4; 
} 
 
 
 
/********************************************************************** 
functionName:void readCommReg(BYTE *CommReg,BYTE chs) 
description:读AD7710控制寄存器,放在*CommReg里。 chs:选择通道数,0,1,2,3 
运行时间:70.53us  7.3728MHZ晶振 
**********************************************************************/ 
void readCommReg(BYTE *CommReg,BYTE chs) 
{ 
	BYTE i,j,temp; 
	SDATA_SLAVE; 
	SET_RFS_1; 
	SET_RFS_2; 
	SET_RFS_3; 
	SET_RFS_4; 
	SET_TFS_1; 
	SET_TFS_2; 
	SET_TFS_3; 
	SET_TFS_4; 
	CLR_SCLK; 
	ACCESS_CTL_REG;	 
	switch(chs) 
	{ 
		case 0: 
		{ 
			CLR_RFS_1; 
			break; 
		} 
		case 1: 
		{ 
			CLR_RFS_2; 
			break; 
		} 
		case 2: 
		{ 
			CLR_RFS_3; 
			break; 
		} 
		case 3: 
		{ 
			CLR_RFS_4; 
			break; 
		} 
		default: 
		{ 
			break; 
		} 
	} 
	NOP(); 
	for(i=0;i<3;i++) 
	{ 
		temp=0; 
		NOP(); 
		for(j=0;j<8;j++) 
		{ 
			temp<<=1; 
			if(STATUS_SDATA) 
			temp|=0x01;	 
			SET_SCLK; 
			NOP();		 
			CLR_SCLK; 
		} 
		*(CommReg+i)=temp; 
	} 
	SET_RFS_1; 
	SET_RFS_2; 
	SET_RFS_3; 
	SET_RFS_4; 
	SDATA_MASTER; 
} 
 
 
 
/********************************************************************** 
functionName:BYTE ad7710Init(BYTE chs) 
description:对AD7710初始化。 chs:选择通道数,0,1,2,3 
如果初始化成功返回0xff,失败返回0x00; 
**********************************************************************/ 
BYTE ad7710Init(BYTE chs) 
{ 
	BYTE ad7710CtrlReg[3],temp[3],i,j,result; 
	ad7710CtrlReg[0]=CTRL_REG_HIG; 
	ad7710CtrlReg[1]=CTRL_REG_MID; 
	ad7710CtrlReg[2]=CTRL_REG_LOW; 
	send24Bit(ad7710CtrlReg,chs); 
	usDelay(32); 
	readCommReg(temp,chs); 
	i=0x00; 
	while(i<20) 
	{ 
		result=0xFF; 
		for(j=0;j<3;j++) 
		{ 
			if(temp[j]!=ad7710CtrlReg[j]) 
			{ 
				result=0x00; 
			} 
		} 
		if(result) 
		{ 
			return(result); 
		} 
		i++; 
		send24Bit(ad7710CtrlReg,chs); 
		usDelay(32); 
		readCommReg(temp,chs); 
	} 
	return(result); 
} 
 
 
 
 
 
/********************************************************************** 
functionName:signed long ad7710DataOut(BYTE chs) 
description:对AD7710读数据寄存器数据。 chs:选择通道数,0,1,2,3 
**********************************************************************/ 
signed long ad7710DataOut(BYTE chs) 
{ 
	BYTE i; 
	unsigned long result; 
	SDATA_SLAVE; 
	SET_RFS_1; 
	SET_RFS_2; 
	SET_RFS_3;  
	SET_RFS_4; 
	SET_TFS_1; 
	SET_TFS_2; 
	SET_TFS_3; 
	SET_TFS_4; 
	CLR_SCLK; 
	ACCESS_DATA_REG; 
	switch(chs) 
	{ 
		case 0: 
		{ 
			CLR_RFS_1; 
			break; 
		} 
		case 1: 
		{ 
			CLR_RFS_2; 
			break; 
		} 
		case 2: 
		{ 
			CLR_RFS_3; 
			break; 
		} 
		case 3: 
		{ 
			CLR_RFS_4; 
			break; 
		} 
		default: 
		{ 
			break; 
		} 
	}	 
	result=0; 
	for(i=0;i<18;i++) 
	{ 
		result<<=1; 
		if(STATUS_SDATA) 
		result|=0x000001; 
		SET_SCLK; 
		NOP();		 
		CLR_SCLK; 
	} 
	for(i=0;i<6;i++) 
	{ 
		SET_SCLK; 
		NOP();		 
		CLR_SCLK; 
	} 
	SET_RFS_1; 
	SET_RFS_2; 
	SET_RFS_3; 
	SET_RFS_4; 
	SDATA_MASTER; 
	result=result-0x0001ffff; 
   	return(result); 
} 
 
 
 
 
/********************************************************************** 
functionName:signed long ad7710ReadData(BYTE chs) 
description:等待AD7710转换完成,读数据。 chs:选择通道数,0,1,2,3 
**********************************************************************/ 
signed long ad7710ReadData(BYTE chs) 
{ 
   	signed long result; 
   	if(chs==0) 
   	{ 
     		while(STATUS_DRDY_1); 
   	} 
   	else if(chs==1) 
   	{ 
     		while(STATUS_DRDY_2); 
   	} 
   	else if(chs==2) 
   	{ 
     		while(STATUS_DRDY_3); 
   	} 
   	else 
   	{ 
   		while(STATUS_DRDY_4); 
   	} 
   	result=ad7710DataOut(chs); 
   	return(result); 
} 
 
 
 
 
/********************************************************************** 
functionName:signed long ad7710DataOut(BYTE chs) 
description:对AD7710读数据寄存器数据。 chs:选择通道数,0,1,2,3 
**********************************************************************/ 
signed long ad7710DataOut17BIT(BYTE chs) 
{ 
	BYTE i; 
	unsigned long result; 
	SDATA_SLAVE; 
	SET_RFS_1; 
	SET_RFS_2; 
	SET_RFS_3;  
	SET_RFS_4; 
	SET_TFS_1; 
	SET_TFS_2; 
	SET_TFS_3; 
	SET_TFS_4; 
	CLR_SCLK; 
	ACCESS_DATA_REG; 
	switch(chs) 
	{ 
		case 0: 
		{ 
			CLR_RFS_1; 
			break; 
		} 
		case 1: 
		{ 
			CLR_RFS_2; 
			break; 
		} 
		case 2: 
		{ 
			CLR_RFS_3; 
			break; 
		} 
		case 3: 
		{ 
			CLR_RFS_4; 
			break; 
		} 
		default: 
		{ 
			break; 
		} 
	}	 
	result=0; 
	for(i=0;i<17;i++) 
	{ 
		result<<=1; 
		if(STATUS_SDATA) 
		result|=0x000001; 
		SET_SCLK; 
		NOP();		 
		CLR_SCLK; 
	} 
	for(i=0;i<7;i++) 
	{ 
		SET_SCLK; 
		NOP();		 
		CLR_SCLK; 
	} 
	SET_RFS_1; 
	SET_RFS_2; 
	SET_RFS_3; 
	SET_RFS_4; 
	SDATA_MASTER; 
	result=result-0x0000ffff; 
   	return(result); 
} 
 
signed long ad7710ReadData17BIT(BYTE chs) 
{ 
   	signed long result; 
   	if(chs==0) 
   	{ 
     		while(STATUS_DRDY_1); 
   	} 
   	else if(chs==1) 
   	{ 
     		while(STATUS_DRDY_2); 
   	} 
   	else if(chs==2) 
   	{ 
     		while(STATUS_DRDY_3); 
   	} 
   	else 
   	{ 
   		while(STATUS_DRDY_4); 
   	} 
   	result=ad7710DataOut17BIT(chs); 
   	return(result); 
}

⌨️ 快捷键说明

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