113 lines
2.7 KiB
C
113 lines
2.7 KiB
C
#include "../main/SystemInclude.h"
|
|
|
|
TypeSecondary Secondary;
|
|
//二进制数调整BCD码的方法是将二进制码左移8次,每次移位后都检查低四位LSD+3是否大于7,如是则加3,否则不加,高4位MSD作同样处理"
|
|
//void ConvertWordHEXToBCD(u16 convertHex)
|
|
//{
|
|
//u32 convertHex;
|
|
// for(I=0; I<16; I++)
|
|
// {
|
|
//
|
|
//
|
|
// }
|
|
//
|
|
//
|
|
//}
|
|
|
|
|
|
/******************************************************************************/
|
|
u8 BCDToHEX(u8 BCDBuffer)
|
|
{
|
|
return (((BCDBuffer & 0xf0)>>4)*10 + (BCDBuffer & 0x0f));
|
|
}
|
|
|
|
/******************************************************************************/
|
|
u16 HEXToBCD(u8 HEXBuffer)
|
|
{
|
|
u16 tempBCD;
|
|
|
|
tempBCD = HEXBuffer/100;
|
|
HEXBuffer -= tempBCD * 100;
|
|
tempBCD <<= 4;
|
|
tempBCD |= HEXBuffer / 10;
|
|
HEXBuffer -= (tempBCD & 0x000f) * 10;
|
|
tempBCD <<= 4;
|
|
tempBCD |= HEXBuffer;
|
|
|
|
return tempBCD;
|
|
//return ((((u16)HEXBuffer / 100) << 8) | ((HEXBuffer / 10) << 4) | (HEXBuffer % 10));
|
|
}
|
|
|
|
/******************************************************************************/
|
|
void ConvertHEXToBCDArray(u32 convertHex, u8 *resultPointer, u16 covertLen, u16 order)
|
|
{
|
|
u16 I;
|
|
s16 adrBuf;
|
|
u32 covertBuf;
|
|
|
|
if(order == LOW_FIRST) adrBuf = 1;
|
|
else
|
|
{
|
|
resultPointer += covertLen-1;
|
|
adrBuf = -1;
|
|
}
|
|
|
|
for(I=0; I<covertLen; I++)
|
|
{
|
|
covertBuf = convertHex / (u32)10;
|
|
*resultPointer = (u8)(convertHex-covertBuf*10);
|
|
convertHex = covertBuf;
|
|
|
|
resultPointer += adrBuf;
|
|
//if(order == LOW_FIRST) resultPointer++;
|
|
//else resultPointer--;
|
|
}
|
|
}
|
|
|
|
/******************************************************************************/
|
|
s32 SecondaryCompute(void)
|
|
{
|
|
f32 fTemp;
|
|
|
|
tmpSLA = (s32)Secondary.ValueH;
|
|
tmpSLA -= (s32)Secondary.ValueL;
|
|
fTemp = (float)tmpSLA;
|
|
|
|
tmpSLB = Secondary.NodeX;
|
|
tmpSLB -= Secondary.NodeL;
|
|
//tmpSLA *= tmpSLB;
|
|
fTemp *= (float)tmpSLB;
|
|
|
|
tmpSLB = Secondary.NodeH;
|
|
tmpSLB -= Secondary.NodeL;
|
|
//tmpSLA /= tmpSLB;
|
|
if(tmpSLB != 0) fTemp /= (float)tmpSLB;
|
|
else return 0;
|
|
|
|
tmpSLA = (s32)fTemp;
|
|
tmpSLA += (s32)Secondary.ValueL;
|
|
|
|
//if(tmpSLA < 0) return 0;
|
|
//else return (u16)tmpSLA;
|
|
return tmpSLA;
|
|
}
|
|
|
|
//内码处理-------------------------------------------------------------
|
|
u16 WordSubFunction(u16 minuend, u16 subtractor)
|
|
{
|
|
u16 subResult;
|
|
|
|
subResult = minuend - subtractor;
|
|
if(minuend >= subtractor)
|
|
{
|
|
if(subResult < 32768) subResult += 32768;
|
|
else subResult = 65535;
|
|
}
|
|
else
|
|
{
|
|
if(subResult < 32768) subResult = 0;
|
|
else subResult -= 32768;
|
|
}
|
|
|
|
return subResult;
|
|
} |