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

Soyez le premier à donner votre avis sur cette source.

Vue 11 378 fois - Téléchargée 232 fois

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

Ajouter un commentaire

Commentaire

jon84
Messages postés
2
Date d'inscription
jeudi 13 mars 2008
Statut
Membre
Dernière intervention
25 décembre 2008
-
merci pour ce code et pour se travail je veut juste que tu ajoute un menu ki demande si je veut parité paire ou bit de parité impaire pas toutes les deux en méme temp et mille merci pour se travaille

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.