Communication Série RS232 - Pb d'affichage de caractères
bracqjean
Messages postés5Date d'inscriptionmercredi 7 novembre 2007StatutMembreDernière intervention31 janvier 2008
-
30 janv. 2008 à 12:07
bracqjean
Messages postés5Date d'inscriptionmercredi 7 novembre 2007StatutMembreDernière intervention31 janvier 2008
-
31 janv. 2008 à 11:28
Bonjour,
Je suis débutant en C. J'ai besoin de transmettre des données sur le port COM d'un PC, à destination d'un variateur. Le but est d'envoyer une chaîne de caractères.
Le programme (que j'ai récupéré et modifié) n'envoyait à l'origine qu'un seul caractère. Je l'ai modifié pour en envoyer plusieurs, mais je me retrouve avec un problème d'affichage.
Quelqu'un pourrait il m'aider ?
bracqjean
Messages postés5Date d'inscriptionmercredi 7 novembre 2007StatutMembreDernière intervention31 janvier 2008 30 janv. 2008 à 12:09
Ci dessous le progarmme :
/*--------------------------------------------------------------------------*/
/* Travaux Pratiques : Communication entre PC et un port série */
/*--------------------------------------------------------------------------*/
/* Nom du programme : serie.cpp */
/* Auteur : D.PAYON */
/* Date de création : 15/09/2005 */
/* Version : 2.1 */
/* Modifications : -> La programmation du 8250 par les API de Windows */
/*--------------------------------------------------------------------------*/
#include // pour CIN & COUT
#include // pour le format de ces flux
#include <windows.h> // pour utiliser les API32
#include <stdio.h> // pour exploiter les Entrées/Sorties standards
#include <conio.h> // pour exploiter les Entrées/Sorties standards
#define aaxan 0x85 //Symbole du "à" en code page 437
#define aigu 0x82 //Symbole du "é" en code page 437
#define grave 0x8A //Symbole du "è" en code page 437
#define cdie 0x87 //Symbole du "ç" en code page 437
//********************************************************************
// INITIALISATION DU PORT
//********************************************************************
void Initialiser(HANDLE hCom,BYTE NbDonnees,BYTE NbStops,BYTE Parite, DWORD Vitesse)
{
BOOL retour;
DCB dcb; //Une structure "Device-Control Block" definit l'initialisation
// d'un périphérique de communications.
retour = GetCommState(hCom,&dcb); // Lecture des paramétres physiques.
if (retour == 0) return; // Si rien, alors pas de périphérique.
else // Si présence port, alors définir :
{
dcb.ByteSize=NbDonnees; // -Nombre de bits de Données
dcb.StopBits=NbStops; // -Nombre de bit(s) de Stop
dcb.Parity=Parite; // -Type de parité
dcb.BaudRate=Vitesse; // -Vitesse de transfert des données
retour = SetCommState(hCom,&dcb); // Ecriture de ces paramètres.
}
}
//********************************************************************
// Test des API32 de gestion du port série
//********************************************************************
void main(void)
{
// int touche;
int NbDonnees=8;
int Vitesse=9600;
unsigned char Parite;
char NomPort[4+1];
int NoPort ;
BOOL retour;
COMSTAT EtatCom;
DWORD CodeErreur , NbOctetsEcrits , NbOctetsALire, NbOctetsLus, i ;
char octet;
BYTE Nbstop=1;
BYTE BufferOut[10]={1,5,9,11,18,14,55,127,19,24};
BYTE *BufferIn;
HANDLE hCom; // le port est référencé avec un identifiant de type HANDLE
printf("\nEntrer le numero du port serie (par exemple 1 pour COM1) ",aigu,aigu);
scanf("%d",&NoPort);
//----------- Ouverture du port ------------------
sprintf(NomPort,"COM%d",NoPort);
hCom=CreateFile(NomPort,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING ,0,NULL);
if (hCom == INVALID_HANDLE_VALUE) return;
//------------Config du port----------------------
cout<<endl<<"La configuration du port est : ";
cout<<"\t- "<<Vitesse<<" bauds"<<endl;
cout<<"\t\t\t\t- "<<NbDonnees<<" bits de donnees"<<endl;
printf("\t\t\t\t- %d",Nbstop);
printf(" bit(s) de stop\n");
// ------------ECRITURE D'UN CARACTÈRE SUR LE PORT------------
fflush(stdin);
cout<<endl<<"Entrer une chaine de caracteres a envoyer : "<<flush;
scanf("%s",&octet);
printf("\nAffichage de la valeur contenue dans octet : ");
printf(&octet,"\n");
printf("\nAppuyer sur une touche pour continuer\n");
getch();
//------- Lecture du nombre de caractères présents dans le buffer d'entrée -----
retour=WriteFile(hCom,&octet,10,&NbOctetsEcrits,NULL);
printf("\nValeur contenue dans NbOctetsEcrits : ");
printf("%i",NbOctetsEcrits);
printf("\n");
retour=ClearCommError(hCom,&CodeErreur,&EtatCom);
printf("\nValeur de retour : si = 0, le prog fait un return -- Ici, retour = ");
cout<<(retour)<<endl;
printf("Appuyez sur une touche pour continuer");
getch();
if ( ! retour) return ;
else NbOctetsALire = NbOctetsEcrits;
printf("\n\nAffichage de la variable NbOctetsALire : ");
cout<<(NbOctetsALire)<<endl;
//--------- Lecture de tous les octets reçus et stockage dans le tableau BufferIn---