Votre question

[résolu] C : Envoi données binaires via rs232

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
6 Mai 2010 15:58:48

Bonjour,

Je réalise un projet de morpion numérique mixte C/vhdl. Un fichier C gère le programme du morpion, envoie le coup joué via une liaison RS232 à un CPLD qui gère d'allumer 9 diodes bicolores.

On envoie donc 18bits, par exemple "010000000000000000" pour allumer la première diode dans une couleur.

Voila l'extrait du code C qui devrait envoyer par exemple ici un octet :

  1. char buf[50]="01000000";
  2.  
  3. if(!WriteFile(hComPort, buf, strlen(buf), &dwBytesWritten,NULL))
  4. printf("erreur ecriture\n");
  5. else
  6. printf("ecriture reussie\n");


Le problème étant que chaque chiffre est je pense traduit en son code binaire ascii correspondant. Résultat : pas mal de diodes s'allument alors qu'elles ne devraient pas.

Arrive donc ma question : comment imposer le fait que ce qui est dans le char est en code binaire?

Je précise que j'utilise le compilateur tcc.
La liaison RS232 est réglée en 8bits sans bit de parité via le handler hcomPort.

Merci d'avance de m'apporter de l'aide :) 

Autres pages sur : resolu envoi donnees binaires via rs232

6 Mai 2010 20:07:26

Un char de base c'est un octet, donc une valeur allant de -127 à 126.
Un unsigned char aura donc une valeur allant de 0 à 255.

Je te conseil donc un petit truc dans un ".h" quelque part :
  1. typedef unsigned char Byte


Pour avoir ton octet 01000000 il suffit de faire :

  1. Byte c = 64;


et si tu voulais mettre 11000000 :

  1. Byte c = 192;


T'as compris ? Convertit dont code binaire en entier, et hop tu le fou dedans !


Bon courage pour la suite.
m
0
l
7 Mai 2010 19:26:40

Merci pour cette réponse rapide!

Je teste ca des que je peux et je passerai en [résolu] si miracle se produit :) 
m
0
l
17 Mai 2010 14:42:10

re bonjour,

Mon programme marche enfin, passer en décimale n'a à priori pas marché comme voulu. La solution a été de convertir chaque morceau de 4bits en hexadecimal et d'envoyer des unsigned char du type 0x00000000.

merci pour l'idee et a+
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS