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

📄 a.c

📁 有关AD芯片AD7730的应用程序
💻 C
字号:
#include "Board.h"
#include "AD7730.h"
//======================================

void AD7730_Reset(void)
{
	MCU_NRST=1;

	MCU_NRST=0;

	MCU_NRST=1;
	return;
}

void AD7730_WrBytes(unsigned char bBytes,unsigned char *pData)
{
	unsigned char idata bTmp,bCt,u;
	
	MCU_SCK=0;

	MCU_SCS=0;

	for (u=0;u<bBytes;u++) {

		bTmp=pData[u];

		for (bCt=0;bCt<8;bCt++) {

			MCU_SCK=1;

			if (bTmp&0x80) {
				MCU_DOUT=1;
			}
			else {
				MCU_DOUT=0;
			}

			MCU_SCK=0;
			bTmp=bTmp<<1;
		}
	}

	MCU_SCS=1;


	return;
}

void AD7730_RdBytes(unsigned char bBytes,unsigned char *pData)
{
	unsigned char idata bCt,bTmp,u;

	

	MCU_SCK=0;
	MCU_DIN=1;

	MCU_SCS=0;
	
	
	for (u=0;u<bBytes;u++) {
		bTmp=0;
		for (bCt=0;bCt<8;bCt++) {

			MCU_SCK=1;
			
			if (MCU_DIN) {
				bTmp++;
			}
	
			if (bCt!=7) {
				bTmp=bTmp<<1;
			}
	
			MCU_SCK=0;
		}

		pData[u] = bTmp;
	}

	MCU_SCS=1;

	return ;
}

void ResetInterface(void)
{
	
	AD7730_WrBytes(1,0xFF);
	AD7730_WrBytes(1,0xFF);
	AD7730_WrBytes(1,0xFF);
	AD7730_WrBytes(1,0xFF);
	return;
}
	

unsigned char SingleRead8BitsReg(unsigned char bAdr)
{
	unsigned char idata bTmp;


	if (bAdr>7) {
		bAdr=7;
	}
	
	bTmp=COMM_MASK & (bAdr|COMM_SINGLERD);
	AD7730_WrBytes(1,&bTmp);		//写通讯寄存器

	AD7730_RdBytes(1,&bTmp);


	return bTmp;
}

unsigned int SingleRead16BitsReg(unsigned char bAdr)
{
	unsigned char idata bTmp[2];
	unsigned int idata iTmp;

	if (bAdr>7) {
		bAdr=7;
	}

	bTmp[0]=COMM_MASK&(bAdr|COMM_SINGLERD);
	AD7730_WrBytes(1,bTmp);		//写通讯寄存器

	AD7730_RdBytes(2,bTmp);


	iTmp=bTmp[1]<<8+bTmp[0];


	return iTmp;
}



unsigned char StartContinuousRead(unsigned char bAdr)
{
	unsigned char idata bTmp;

	if (bAdr>7) {
		bAdr=7;
	}
	
	bTmp=COMM_MASK&(bAdr|COMM_CONTRD);
	AD7730_WrBytes(1,&bTmp);		//写通讯寄存器
	AD7730_RdBytes(1,&bTmp);

	return bTmp;
}

void StopContinuousRead(unsigned char bAdr)
{
	if (bAdr>7) {
		bAdr=7;
	}
	
	AD7730_WrBytes(1,COMM_MASK&COMM_STOPCONT);		//写通讯寄存器
	return ;
}
//======================================

unsigned char AD_ReadStatusReg(void)
{
	unsigned char idata bTmp;


	bTmp=COMM_MASK & (0x00|COMM_SINGLERD);

	AD7730_WrBytes(1,&bTmp);		//写通讯寄存器

	AD7730_RdBytes(1,&bTmp);


	return bTmp;
}
//======================================

void AD_WriteModeReg(unsigned int iData)
{
	unsigned char idata bTmp[2];

	bTmp[0]=COMM_MASK&(ADREG_MODE|COMM_SINGLEWR);

	AD7730_WrBytes(1,bTmp);		//写通讯寄存器


	iData =	iData & 0xFFBF;
	bTmp[0] = (unsigned char) (iData>>8);
	bTmp[1] = (unsigned char) (iData&0x00FF);


	AD7730_WrBytes(2,bTmp);		//写通讯寄存器
	return;
}
//======================================
unsigned int AD_ReadModeReg(void)
{
	unsigned char idata bTmp[2];
	unsigned int idata iDat;

	bTmp[0] = COMM_MASK & (ADREG_MODE|COMM_SINGLERD);

	AD7730_WrBytes(1,bTmp);		//写通讯寄存器

	AD7730_RdBytes(2,bTmp);

	iDat = bTmp[0];
	iDat = iDat<<8;

	iDat = iDat + bTmp[1];

	return iDat;
}
//======================================
unsigned long AD_ReadDataReg(bit fWL)
{
	unsigned char idata bTmp[3]=0;
	unsigned long idata lDat;

	bTmp[0] = COMM_MASK & (ADREG_DATA|COMM_SINGLERD);

	AD7730_WrBytes(1,bTmp);		//写通讯寄存器

	if (fWL==1) {

		AD7730_RdBytes(3,bTmp);

		lDat = bTmp[0];
		lDat = lDat<<8;
		lDat = lDat+bTmp[1];
		lDat = lDat<<8;
		lDat = lDat+bTmp[2];
	}
	else {
		AD7730_RdBytes(2,bTmp);
		lDat = bTmp[0];
		lDat = lDat<<8;
		lDat = lDat+bTmp[1];
	}
	
	return lDat;
}
//======================================
unsigned long AD_ReadFilterReg(void)
{
	unsigned char idata bTmp[3];
	unsigned long idata lDat;

	bTmp[0] = COMM_MASK & (ADREG_FILTER|COMM_SINGLERD);

	AD7730_WrBytes(1,bTmp);		//写通讯寄存器

	AD7730_RdBytes(3,bTmp);
	
	lDat = bTmp[0];
	lDat = lDat<<8;
	lDat = lDat+bTmp[1];
	lDat = lDat<<8;
	lDat = lDat+bTmp[2];

	return lDat;

}
//======================================
void AD_WriteFilterReg(unsigned long lData)
{
	unsigned char idata bTmp[3];

	bTmp[0]=COMM_MASK&(ADREG_FILTER|COMM_SINGLEWR);

	AD7730_WrBytes(1,bTmp);		//写通讯寄存器


	lData =	lData & 0xFFF33F;

	bTmp[0] = (unsigned char) ((lData>>16)&0x0000FF);

	bTmp[1] = (unsigned char) ((lData>>8)&0x0000FF);

	bTmp[2] = (unsigned char) (lData & 0x0000FF);


	AD7730_WrBytes(3,bTmp);		//写通讯寄存器
	return;
}
//======================================
unsigned char AD_ReadDACReg(void)
{
	unsigned char idata bTmp;

	bTmp = COMM_MASK & (ADREG_DAC|COMM_SINGLERD);

	AD7730_WrBytes(1,&bTmp);		//写通讯寄存器

	AD7730_RdBytes(1,&bTmp);

	return bTmp;

}
//======================================
void AD_WriteDACReg(unsigned char bData)
{
	unsigned char idata bTmp;

	bTmp = COMM_MASK & (ADREG_DAC|COMM_SINGLEWR);

	AD7730_WrBytes(1,&bTmp);		//写通讯寄存器


	bData=bData&0x3F;

	AD7730_WrBytes(1,&bData);		//写通讯寄存器
	return;
}

//======================================
unsigned long AD_ReadOffsetReg(void)
{
	unsigned char idata bTmp[3];
	unsigned long idata lDat;

	bTmp[0] = COMM_MASK & (ADREG_OFFSET|COMM_SINGLERD);

	AD7730_WrBytes(1,bTmp);		//写通讯寄存器

	AD7730_RdBytes(3,bTmp);
	
	lDat = bTmp[0];
	lDat = lDat<<8;
	lDat = lDat+bTmp[1];
	lDat = lDat<<8;
	lDat = lDat+bTmp[2];

	return lDat;

}
//======================================
void AD_WriteOffsetReg(unsigned long lData)
{
	unsigned char idata bTmp[3];

	bTmp[0] = COMM_MASK&(ADREG_OFFSET|COMM_SINGLEWR);

	AD7730_WrBytes(1,bTmp);		//写通讯寄存器



	bTmp[0] = (unsigned char) ((lData>>16)&0x0000FF);

	bTmp[1] = (unsigned char) ((lData>>8)&0x0000FF);

	bTmp[2] = (unsigned char) (lData & 0x0000FF);


	AD7730_WrBytes(3,bTmp);		//写通讯寄存器
	return;
}
//======================================
unsigned long AD_ReadGainReg(void)
{
	unsigned char idata bTmp[3];
	unsigned long idata lDat;

	bTmp[0] = COMM_MASK & (ADREG_GAIN|COMM_SINGLERD);

	AD7730_WrBytes(1,bTmp);		//写通讯寄存器

	AD7730_RdBytes(3,bTmp);
	
	lDat = bTmp[0];
	lDat = lDat<<8;
	lDat = lDat+bTmp[1];
	lDat = lDat<<8;
	lDat = lDat+bTmp[2];

	return lDat;

}
//======================================
void AD_WriteGainReg(unsigned long lData)
{
	unsigned char idata bTmp[3];

	bTmp[0]=COMM_MASK&(ADREG_GAIN|COMM_SINGLEWR);

	AD7730_WrBytes(1,bTmp);		//写通讯寄存器


	bTmp[0] = (unsigned char) ((lData>>16)&0x0000FF);

	bTmp[1] = (unsigned char) ((lData>>8)&0x0000FF);

	bTmp[2] = (unsigned char) (lData & 0x0000FF);


	AD7730_WrBytes(3,bTmp);		//写通讯寄存器
	return;
}
//======================================
void InitAD(void)
{
	AD_WriteModeReg(0x11B0);
	return;	
}
//======================================
unsigned long InternalZeroCalibration(unsigned char bTimes)
{
	unsigned char idata u;
	unsigned long idata lTmp;
	
	lTmp=0;

	for(u=0;u<bTimes;u++) {
		AD_WriteModeReg(0x9180);
		Delay(1);
		while(MCU_ADI);
		lTmp=lTmp+AD_ReadOffsetReg();
	}
	return lTmp/bTimes;

}
//======================================
unsigned long InternalFullCalibration(unsigned char bTimes)
{
	unsigned char idata u;
	unsigned long idata lTmp;
	
	lTmp=0;

	for(u=0;u<bTimes;u++) {

		AD_WriteModeReg(0xb180);
		Delay(1);
		while(MCU_ADI);
		lTmp=lTmp+AD_ReadGainReg();
	}
	return lTmp/bTimes;

}
//======================================
unsigned long SystemZeroCalibration(unsigned char bTimes)
{
	unsigned char idata u;
	unsigned long idata lTmp;
	
	lTmp=0;

	for(u=0;u<bTimes;u++) {
		AD_WriteModeReg(0xD180);
		Delay(1);
		while(MCU_ADI);
		lTmp=lTmp+AD_ReadOffsetReg();
	}
	return lTmp/bTimes;

}
//======================================
unsigned long SystemFullCalibration(unsigned char bTimes)
{
	unsigned char idata u;
	unsigned long idata lTmp;
	
	lTmp=0;

	for(u=0;u<bTimes;u++) {
		AD_WriteModeReg(0xF180);
		Delay(1);
		while(MCU_ADI);
		lTmp=lTmp+AD_ReadGainReg();
	}
	return lTmp/bTimes;

}
	

⌨️ 快捷键说明

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