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
|
int i=0;
int j=0;
//---------- Calcul du CRC16 Modbus ---------------
// gérer "octet" sur 16 bits pour calcul de CRC sur 16 bits
char trame[12]="";
strcpy(trame,EdRequete->Text.t_str());
short int octet=trame[i];
octet=octet&0x00FF;
short int polynome=0xA001;
int nombreOctets=8;
char resultatCRC[10]="";
short int CRC;
do
{
CRC=CRC^octet;
for(j=0;j<8;j++)
{
short int parite=CRC & 0x0001;
CRC=CRC/2;
if (parite==1)
{
CRC=CRC^polynome;
}
}
i++;
octet=trame[i];
octet=octet&0x00FF;
nombreOctets=nombreOctets-1;
}
while (nombreOctets>0);
sprintf(resultatCRC,"0x%hX",CRC);
Edit1->Text=resultatCRC; |
Partager