1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| void main(void)
{
char SendBuff[50];
int iLen = 0;
//On remplit la chaine
SendBuff[iLen++] = "C";
SendBuff[iLen++] = "R";
SendBuff[iLen++] = "C";
//on calcule et on ajoute le CRC a la suite....
CRC(&iLen);
........
}
void __fastcall CRC(int * iLen)
{
UINT CRC = makeCRC(SendBuff, *iLen);
SendBuff[(*iLen)++] = (char) ((CRC >> 8) & 0x0ff);
SendBuff[(*iLen)++] = (char) (CRC & 0x0ff);
}
unsigned int __fastcall addCRC(unsigned int crc,char cc)
{
int bBCCorCRC = 0;
unsigned char c = (unsigned char)cc;
register unsigned int u;
unsigned int t, ut, newcrc;
if (bBCCorCRC)
{
crc = crc >> 8;
crc ^= c;
newcrc = crc << 8;
}
else
{
t = crc ^ (unsigned int) c & 0xff;
u = t ^ ( t << 4) & 0xff;
ut = ( u & 0xf0) | ( t & 0x0f);
newcrc = ((crc >> 8) & 0xff) ^ (ut << 8) ^(ut << 3)
^ ((ut >> 4) & 0xff) & 0xffff;
}
return newcrc;
}
unsigned int __fastcall makeCRC(const char *c, int len)
{
unsigned int crc;
crc = 0;
while( --len >= 0)
{
crc = addCRC(crc, *c++);
}
return (crc & 0xffff);
} |