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

📄 ad7799.c

📁 AD7799的驱动程序片断
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "Board.h"
#include "AD7799.h"
#include "ExtIo.h"
//======================================================
extern DEV_CONT sMyCont;
extern unsigned char idata bPortA_Temp;
extern unsigned long GetWeight2(unsigned char bCh);
unsigned long ChangeAd2Weight(unsigned char bSwt,unsigned long ulAd);
//======================================================
static void outportb2(unsigned int Addr, unsigned char bDat)
{
	EA=0;
	AUXR = AUXR | 0x02;	//打开外部RAM
	*((unsigned char xdata *) Addr) = bDat;
	AUXR = AUXR & 0xFD;	//关闭外部RAM
	EA=1;
	return;
}

static void SetPortA_Output_Bits2(unsigned char bMask,bit fSet)
{
	bit	fBak;

	fBak = ET1;
	ET1 = 0;
	if (fSet) {

		bPortA_Temp =  bPortA_Temp| bMask;
	}
	else {
		bPortA_Temp = bPortA_Temp &(~bMask);

	}

	outportb2(ADR_XPORT_A,bPortA_Temp);
	ET1 = fBak;

	return;

}

static SelectAdChip(unsigned char bSel)
{
	if (bSel==0) {
		SetPortA_Output_Bits2(0x01,0);
	}
	else {
		SetPortA_Output_Bits2(0x02,0);
	}
	return;
}

static UnSelectAdChip(void)
{
	SetPortA_Output_Bits2(0x01,1);
	SetPortA_Output_Bits2(0x02,1);

	return;
}

static unsigned char SpiOutIn8 (unsigned char bOut) 
{
	unsigned char bTmp;

	SPDR = bOut;
	
	do{
		bTmp = SPSR & 0x80;
	} while (bTmp != 0x80);
	
	return SPDR;
}

static void SpiOut(unsigned char bDat)
{
	unsigned char bCt;

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

		MCU_GSCK = 0;

		if (bDat&0x80) {

			MCU_GMOSI = 1;
		}
		else {
			MCU_GMOSI = 0;
		}

		MCU_GSCK = 1;
		bDat = bDat<<1;
	}
	
}

static unsigned char SpiIn(void)
{
	unsigned char bTmp,bCt;

	bTmp=0;

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

		MCU_GSCK = 0;
		
		if (MCU_GMISO) {
			bTmp++;
		}

		if (bCt!=7) {
			bTmp=bTmp<<1;
		}

		MCU_GSCK = 1;
	}

	return bTmp;
}
//======================================================
static void AD7799_WrBytes(unsigned char bDev,unsigned char bBytes,unsigned char *pData)
{
	unsigned char u;
	
	MCU_GSCK = 1;
	SelectAdChip(bDev);

	for (u=0;u<bBytes;u++) {
		SpiOut(pData[u]);
	}

	UnSelectAdChip();

	return;
}

static void AD7799_RdBytes(unsigned char bDev,unsigned char bBytes,unsigned char *pData)
{
	unsigned char u;

	MCU_GSCK=1;
	SelectAdChip(bDev);

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

		pData[u] = SpiIn();
	}
 	UnSelectAdChip();

	return ;
}
//======================================================
void ResetInterface(unsigned char bDev)
{

	AD7799_WrBytes(bDev,1,0xFF);
	AD7799_WrBytes(bDev,1,0xFF);
	AD7799_WrBytes(bDev,1,0xFF);
	AD7799_WrBytes(bDev,1,0xFF);

	return;
}
/*	

unsigned char SingleRead8BitsReg(unsigned char bDev,unsigned char bAdr)
{
	unsigned char bTmp;


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

	AD7799_RdBytes(bDev,1,&bTmp);


	return bTmp;
}

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

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

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

	AD7799_RdBytes(bDev,2,bTmp);


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


	return iTmp;
}
*/


unsigned char StartContinuousRead(unsigned char bDev,unsigned char bAdr)
{
	unsigned char bTmp;

	if (bAdr>7) {
		bAdr=7;
	}
	
	bTmp=COMM_MASK&(bAdr|COMM_CONTRD);

	AD7799_WrBytes(bDev,1,&bTmp);		//写通讯寄存器
	AD7799_RdBytes(bDev,1,&bTmp);

	return bTmp;
}

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

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

unsigned char AD_ReadStatusReg(unsigned char bDev)
{
	unsigned char bTmp;


	bTmp=COMM_MASK & (0x00|COMM_SINGLERD);

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

	AD7799_RdBytes(bDev,1,&bTmp);


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

void AD_WriteModeReg(unsigned char bDev,unsigned int uData)
{
	unsigned char bTmp[2];

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

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


	uData &= 0xF00F;
	bTmp[0] = (unsigned char) (uData>>8);
	bTmp[1] = (unsigned char) (uData&0x00FF);


	AD7799_WrBytes(bDev,2,bTmp);		//写通讯寄存器
	return;
}
//======================================
unsigned int AD_ReadModeReg(unsigned char bDev)
{
	unsigned char bTmp[2];
	unsigned int uDat;

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

	AD7799_WrBytes(bDev,1,bTmp);		//写通讯寄存器
	AD7799_RdBytes(bDev,2,bTmp);


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

	return uDat;
}

void AD_WriteConfigReg(unsigned char bDev,unsigned int uData)
{
	unsigned char bTmp[2];

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

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


	uData  &= 0x3737;
	bTmp[0] = (unsigned char) (uData>>8);
	bTmp[1] = (unsigned char) (uData&0x00FF);


	AD7799_WrBytes(bDev,2,bTmp);		//写通讯寄存器
	return;
}
//======================================
unsigned int AD_ReadConfigReg(unsigned char bDev)
{
	unsigned char bTmp[2];
	unsigned int uDat;

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

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

	AD7799_RdBytes(bDev,2,bTmp);

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

	uDat = uDat + bTmp[1];

	return uDat;
}

//======================================
void AD_WriteIoReg(unsigned char bDev,unsigned char bData)
{
	unsigned char bTmp;

	bTmp=COMM_MASK&(ADREG_IO|COMM_SINGLEWR);

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


	bData =	bData & 0x70;

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

unsigned char AD_ReadIoReg(unsigned char bDev)
{
	unsigned char bTmp;


	bTmp=COMM_MASK & (ADREG_IO|COMM_SINGLERD);

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

	AD7799_RdBytes(bDev,1,&bTmp);

	return bTmp;
}

//======================================
unsigned long AD_ReadDataReg(unsigned char bDev)
{
	unsigned char bTmp[3];
	unsigned long ulDat;

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

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

	bTmp[0]=0;
	bTmp[1]=0;
	bTmp[2]=0;

	AD7799_RdBytes(bDev,3,bTmp);

	ulDat = bTmp[0];
	ulDat <<= 8;
	ulDat += bTmp[1];
	ulDat <<= 8;
	ulDat += bTmp[2];

	return ulDat;
}
//======================================
unsigned char AD_ReadIdReg(unsigned char bDev)
{
	unsigned char bTmp;

	bTmp = COMM_MASK & (ADREG_ID|COMM_SINGLERD);

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

	AD7799_RdBytes(bDev,1,&bTmp);
	

	return bTmp;

}
//======================================
unsigned long AD_ReadOffsetReg(unsigned char bDev)
{
	unsigned char bTmp[3];
	unsigned long ulDat;
	bit	fBak;

	fBak = ET1;
	ET1 = 0;

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

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

	AD7799_RdBytes(bDev,3,bTmp);

	
	ulDat = bTmp[0];
	ulDat <<= 8;
	ulDat += bTmp[1];
	ulDat <<= 8;
	ulDat += bTmp[2];

	ET1 = fBak;

	return ulDat;

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

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

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



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

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

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


	AD7799_WrBytes(bDev,3,bTmp);		//写通讯寄存器

	return;
}
//======================================
unsigned long AD_ReadFullScaleReg(unsigned char bDev)
{
	unsigned char bTmp[3];
	unsigned long lDat;
	bit	fBak;

	fBak = ET1;
	ET1 = 0;

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

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

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

	ET1 = fBak;
	return lDat;

}

⌨️ 快捷键说明

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