Se connecter avec
S'enregistrer | Connectez-vous

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

Dernière réponse : dans Programmation

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 :) 
Lassé par la pub ? Créez un compte
Expert Programmation

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.

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+
Lassé par la pub ? Créez un compte
Tom's guide dans le monde