begin process at 2012 05 27 13:54:23
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Périphériques

 > BIT DE PARITÉ, POUR LIAISON SÉRIE [SOURCE C]

BIT DE PARITÉ, POUR LIAISON SÉRIE [SOURCE C]


 Information sur la source

Note :
Aucune note
Catégorie :Périphériques Niveau :Débutant Date de création :09/08/2004 Vu / téléchargé :9 047 / 191

Auteur : snip8

Ecrire un message privé
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

 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

  • #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;
  • }
#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.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture FRAGMENTEUR / RECONSTRUCTEUR DE FICHIERS [SOURCE C]

 Sources de la même categorie

Source avec Zip Source avec une capture RS232 ET PORT // par morphixx
Source avec Zip Source avec une capture [DEV-C++] GESTION DU PORT PARALLÈLE par victorcoasne
Source avec Zip Source avec une capture FAIRE GLISSER LA SOURIS par shorzy
Source avec Zip COMMUNICATION RS232 VIA PORT COM par MadMax1024
Source avec Zip Source avec une capture EXTINCTION ET REDEMARRAGE DE VOTRE MONITEUR À UNE HEURE PRÉC... par Yost

Commentaires et avis

Commentaire de jon84 le 25/12/2008 03:05:35

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

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales