📄 ad7799.c
字号:
#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 + -