📄 cal.c
字号:
#define FlashTab 0x1000
typedef struct
{
unsigned int neg;
unsigned int zero;
unsigned int pos;
}StructCalTab;
_rom StructCalTab Cal_Flash_Tab[] _at(0x7ffa) ={
/* {0x1801,0x8000,0xe7ff},//0-5v
{0x1801,0x8000,0xe7ff},//+/-100mv
{0x1801,0x8000,0xe7ff},//+/-60mv
{0x1801,0x8000,0xe7ff},//+/-25mv */
{0x1801,0x8000,0x0e666},//0-4v 01-04
{0x17f5,0x7ff8,0xe7ff},//+/-100mv
{0x17f0,0x7ff3,0xe7fd},//+/-60mv
{0x17dc,0x7fd5,0xe7e2},//+/-25mv //There is something wrong.
};
StructCalTab Cal_Ram_Tab[]={
{0x199a,0x8000,0xe7ff},//0.8-4v
{0x2e16,0x8000,0x0d1ea},//+/-100mv
{0x1db4,0x8000,0x0e24c},//+/-60mv
{0x2e16,0x8000,0x0d1ea},//+/-25mv
};
_rom StructCalTab Cal_Code_Tab[]={
{0x199a,0x8000,0x0e666},//0-4v
{0x2e16,0x8000,0x0d1ea},//+/-100mv
{0x1db4,0x8000,0x0e24c},//+/-60mv
{0x2e16,0x8000,0x0d1ea},//+/-25mv
};
typedef struct
{
float neg_a;
float neg_b;
float pos_a;
float pos_b;
}StructFact;
_rom StructFact CodeFact[]={
{26213.6/26623.0,32768*(1-26213.6/26623.0),26623.0/26213.6,32768*(1-26623.0/26213.6)},
{20970.88/26623.0,32768*(1-20970.88/26623.0),26623.0/20970.88,32768*(1-26623.0/20970.88)},
{25165.056/26623.0,32768*(1-25165.056/26623.0),26623.0/25165.056,32768*(1-26623.0/25165.056)},
{20970.88/26623.0,32768*(1-20970.88/26623.0),26623.0/20970.88,32768*(1-26623.0/20970.88)},
/* {1.0,0,1.0,0},
{1.0,0,1.0,0},
{1.0,0,1.0,0},
{1.0,0,1.0,0}, */
};
StructFact Cal_Fact[4];
unsigned int Cal_Ram_Zero[4];
extern unsigned char chn_mv[8];
typedef struct {
unsigned char tcover :1;
unsigned char ad7714 :1;
unsigned char tmp100 :1;
unsigned char ram :1;
unsigned char rom :1;
unsigned char fpga :1;
}strErrFlg;
extern strErrFlg ErrFlg;
void Cal_Make_Fact(void)//form Cal_Fact[4] & Cal_Ram_Zero[4]
{
unsigned char i,sign;
unsigned int y0,y1,x0,x1;
float tempfloat;
StructCalTab *pRam;
_rom StructCalTab *pCode;
_rom StructCalTab *pFlash;
StructFact *pFact;
_rom StructFact *pCodeFact;
//float *pCodeFact;
for(i=0;i<4;i++)
{
pRam = Cal_Ram_Tab+i;
pFlash = Cal_Flash_Tab+i;
pCodeFact = CodeFact+i;
// pCode = (StructCalTab *)&Cal_Code_Tab[i];
pCode = Cal_Code_Tab+i;
tempfloat = (float)(pFlash->neg);
tempfloat = tempfloat*(pCodeFact->neg_a)+pCodeFact->neg_b;
if(tempfloat <0) tempfloat=0;
tempfloat = tempfloat+0.5;
x0 = (unsigned int)tempfloat;
pRam->neg = x0;
tempfloat = (float)(pFlash->zero);
tempfloat = tempfloat*(pCodeFact->neg_a)+pCodeFact->neg_b;
if(tempfloat <0) tempfloat=0;
tempfloat = tempfloat+0.5;
x0 = (unsigned int)tempfloat;
if(x0 < pCode->neg) x0 = pCode->neg;
pRam->zero = x0;
tempfloat = (float)(pFlash->pos);
tempfloat = tempfloat*(pCodeFact->neg_a)+pCodeFact->neg_b;
if(tempfloat <0) tempfloat=0;
tempfloat = tempfloat+0.5;
x0 = (unsigned int)tempfloat;
if(x0 < pCode->zero) x0 = pCode->zero;
pRam->pos = x0;
}
for(i=0;i<4;i++)
{
pRam= Cal_Ram_Tab+i;
pCode =Cal_Code_Tab+i;
pFact = Cal_Fact+i;
y0 = pCode->neg;
y1 = pCode->zero;
x0 = pRam->neg;
x1 = pRam->zero;
if(x0>=x1)
{
pFact->neg_a = 1.0;
pFact->neg_b = 0.0;
}
else
{
pFact->neg_a = (float)(y1 - y0)/(float)(x1 - x0);
pFact->neg_b = (float)y1 - (pFact->neg_a * x1);
}
y0 = pCode->zero;
y1 = pCode->pos;
x0 = pRam->zero;
x1 = pRam->pos;
if(x0>=x1)
{
pFact->pos_a = 1.0;
pFact->pos_b = 0.0;
}
else
{
pFact->pos_a = (float)(y1 - y0)/(float)(x1 - x0);
pFact->pos_b = (float)y1 - (pFact->pos_a * x1);
}
Cal_Ram_Zero[i] = pRam->zero;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -