Codage d'un générateur de CRC16
Bonjour
je travaille actuellement sur mon projet pour mon bts, ayant terminé mon travail je voudrais ajouter en bonus un générateur de CRC 16, je travaille sur des trames ModBus, en liaison RS485.
j'ai utilisé l'algorithme de notre prof, mais je ne retrouve pas les résultats attendus :(
voici le code
Code:
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; |
je travaille sur Embarcadero 2010.
Je travaille dessus depuis plusieurs jours, il s'agît peut être d'une erreur toute bête et simple mais je ne vois pas.
Pouvez vous m'aider svp ?
Merci