Transfert de données avec un micro contrôleur PIC

Tooshort23 Messages postés 6 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 26 mai 2003 - 23 mai 2003 à 19:21
Tooshort23 Messages postés 6 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 26 mai 2003 - 26 mai 2003 à 11:20
Bonjour,

je me demande comment stocker des bits dans un octet qui arrivent en série ...

Il s'agit d'une lecture de carte à puce.
Les bits sont transmis un à un mais je n'arrive pas à les ranger correctement.

faut-il utiliser une variable "char"?
ou bien une variable définit:
#define nom_variable 0b00000000

Merci de me répondre.

8 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 mai 2003 à 19:49
dans quoi ils sont tes bits, tu as leur nombre, etc...
octet = var;
BruNews, ciao...
0
Tooshort23 Messages postés 6 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 26 mai 2003
24 mai 2003 à 10:52
mes bits sont dans une carte à puce....
le bit de donnée à transmettre au "pic" est sur le port C.
A chaque coup d'horloge, je lis ce bit en masquant le port C.
Ensuite je ne sais pas où et comment le stocker...
Au total, il y a 64 bits à transmettre. Je souhaite ranger les 8 octets dans un tableau de 8.

Il faut décaler le bit à chaque fois pour le remettre à la bonne place, c'est tout ce que je sais...

Merci pour ton aide...
Ciao
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 mai 2003 à 11:11
faut d'abord definir ce que tu dois faire quand recption finie de tes 8 octets pour savoir la meilleure methode pour y acceder facilement.
unsigned char carte[8];
unsigned char puce;
int i = 0;
quand reception:
carte[i++] = octet;
if(i == 8) ne plus recevoir.
y a un decalage de bits sur octet ?
alors serait par exemple:
carte[i++] = octet >> 7; // si HIBIT
BruNews, ciao...
0
Tooshort23 Messages postés 6 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 26 mai 2003
24 mai 2003 à 11:20
salut Brunews,

je sais comment ranger mes 8 octets mais le problème est que je n'arrive pas à ranger les bits un à un dans une variable. C'est le principe de la liaison série, sauf que c'est moi qui fait le protocole, tu vois ce que je veux dire???

Merci...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 mai 2003 à 11:37
donne moi des noms et types de variables, src et dest et ce que tu veux exactement comme rangement.
BruNews, ciao...
0
Tooshort23 Messages postés 6 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 26 mai 2003
24 mai 2003 à 11:47
Bon voilà:

/* Au premier coup d'horloge, je récupère le premier bit */
horloge = front_descendant (port_b= 0x01, par exemple)

port_C = port_C && 0x10 // masquage du bit de donnée

/* Maintenant je veux ranger le bit de donnée dans une variable codé sur 8 bits (comme une char). */
???

/* Au deuxième coup d'horloge, je récupère un deuxième bit et le range dans la même variable, avec un décalage pour le mettre à la bonne place */

Ciao....
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 mai 2003 à 11:56
char carte; // donnees finales
int i = 8;
while(i) {
carte <<= 1;
carte |= (port_C & 1); // si bit bas de port_C
i--;
}
BruNews, ciao...
0
Tooshort23 Messages postés 6 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 26 mai 2003
26 mai 2003 à 11:20
merci Brunews,

je suis satisfaiot de ta réponse. Tu m'as bien éclairé...

A plus...
Bon courage
0
Rejoignez-nous