Bit de parité, pour liaison série [source c]

Description

Dans le cadre d'une liaison série avec un microcontrôleur, j'ai mis ici le bout de code permettant d'ajouter le bit de parité (en parité paire ici) avant de l'envoyer.

Source / Exemple :


#include <stdio.h>

typedef unsigned char OCTET;

OCTET Parite (OCTET);
void Affich (OCTET);
int Saisie (void);

int main (void)
{
	OCTET mot;

	mot = Saisie();
	Affich(mot);
	mot = Parite(mot);
	Affich(mot);

	return 0;
}

/***************** Conservation de la parité *****************/

OCTET Parite (OCTET cara)
{
	int count, nb = 0;
	OCTET masque = 0x01;

	for(count=0; count<7; count++)
	{
		if(cara & masque)
			nb++;

		masque <<= 1;
	}

	if(nb%2 != 0)
		cara = cara | 0x80;

	return cara;
}

/*********************** Affichage ***************************/

void Affich (OCTET mot)
{
	int i;
	char tab[8];

	for(i=0; i<8; i++)
	{
		tab[7-i] = mot%2;
		mot >>= 1;
	}

	for(i=0; i<8; i++)
		printf("%d",tab[i]);

	puts("");
}

/************************ Saisie ******************************/

int Saisie (void)
{
	int c;

		printf("\nEntrez un entier entre 0 et 127 : ");
		scanf("%d",&c);

	puts("");

	return c;
}

Conclusion :


La détection d'un bit sur l'octet envoyé à la fonction Parite() se fait à l'aide d'un masque (appelé masque dailleur).
Je fait ensuite un et logique et si le résultat et 1 c'est que le bit est à 1.

A l'aide d'un modulo je teste ensuite s'il faut ajouter la parité ou non.
Si le nombre de 1 est pair inutile, sinon le ou logique avec 0x80 (10000000)
permet de forcer le bit de poid fort à 1, donc on ajoute la parité.

C'est une source assez simple mais utile quand on utilise les liaisons séries.

A noter : un octet va de 0x00 à 0xff, soit de 0 à 255 en décimal, ici le dernier bit sert de bit de parité donc l'octet peut avoir des valeur de 0 à 127 uniquement.
Ce qui signifie que s'il sagit de 'envoi d'un code ASCII, on ne gère pas la table ASCII étendue.
Cependant il est possible avec la plus part des µc de mettre un 9 ème bit dans la trame pour la parité.
Dans ce cas la source est assez simple à modifier.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.