-
- Auteur : VirtuA
-
- unsigned int Crc16(unsigned char *Adresse_tab , unsigned char Taille_max)
- {
- unsigned int Crc = 0xFFFF;
- unsigned int Polynome = 0xA001;
- unsigned char CptOctet = 0;
- unsigned char CptBit = 0;
- unsigned char Parity= 0;
-
- Crc = 0xFFFF;
- Polynome = 0xA001; // Polynôme = 2^15 + 2^13 + 2^0 = 0xA001.
-
- for ( CptOctet= 0 ; CptOctet < Taille_max ; CptOctet++)
- {
- Crc ^= *( Adresse_tab + CptOctet); //Ou exculsif entre octet message et CRC
-
- for ( CptBit = 0; CptBit <= 7 ; CptBit++) /* Mise a 0 du compteur nombre de bits */
- {
- Parity= Crc;
- Crc >>= 1; // Décalage a droite du crc
- if (Parity%2 == VRAI) Crc ^= Polynome; // Test si nombre impair -> Apres decalage à droite il y aura une retenue
- } // "ou exclusif" entre le CRC et le polynome generateur.
- }
- return(Crc);
- }
Auteur : VirtuA
unsigned int Crc16(unsigned char *Adresse_tab , unsigned char Taille_max)
{
unsigned int Crc = 0xFFFF;
unsigned int Polynome = 0xA001;
unsigned char CptOctet = 0;
unsigned char CptBit = 0;
unsigned char Parity= 0;
Crc = 0xFFFF;
Polynome = 0xA001; // Polynôme = 2^15 + 2^13 + 2^0 = 0xA001.
for ( CptOctet= 0 ; CptOctet < Taille_max ; CptOctet++)
{
Crc ^= *( Adresse_tab + CptOctet); //Ou exculsif entre octet message et CRC
for ( CptBit = 0; CptBit <= 7 ; CptBit++) /* Mise a 0 du compteur nombre de bits */
{
Parity= Crc;
Crc >>= 1; // Décalage a droite du crc
if (Parity%2 == VRAI) Crc ^= Polynome; // Test si nombre impair -> Apres decalage à droite il y aura une retenue
} // "ou exclusif" entre le CRC et le polynome generateur.
}
return(Crc);
}