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 : Sélectionner tout - Visualiser dans une fenêtre à part
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