philou_a7 a écrit :
si tu dis pas - sur quel type de machine (PC ? MAC ? SUN ? HP ? ...)
- sur quel OS
- avec quel langage
on risque pas de pouvoir t'aider en plus, pour ce genre de question, google est souvent ton ami
|
Bah j'ai deja cherché sur GOOGLE mais bon pas top !
PC + win 2000 + langage C !
En gros voilà le programme :
/*--------------------------------------------------------------------------*/
/* Travaux Pratiques : Pilotage statique des Pins d'un port série */
/*--------------------------------------------------------------------------*/
/* Nom du programme : Ctrl-DB9.cpp */
/* Auteur : D.PAYON */
/* Date de création : 14/09/2003 */
/* Version : 1.0 */
/* Modifications : -> Utilisation des API de Windows /
/*--------------------------------------------------------------------------*/
#include <windows.h> // pour utiliser les API32
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define CR 0x0D // Symbole du retour chariot
#define LF 0x0A // Symbole du saut de ligne
#define aigu 0x82 // Symbole du é en code page 437
#define grave 0x8A // Symbole du è en code page 437
#define aaxan 0x85 // Symbole du à en code page 437
/*--------------------------------------------------------------------------*/
/* Choix du port série */
/*--------------------------------------------------------------------------*/
int Choix_Port()
{
int NoPort,flag=0;
do
{
system("cls" );
flag=0;
fflush(stdin);
printf("\t\t\tÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n" );
printf("\t\t\tº Choix du Port S%crie º\n",aigu);
printf("\t\t\tÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n\n" );
printf("\t- Quel Port s%crie est utilis%c pour cette liaison ?\n\n",aigu,aigu);
printf("\t\t\t- 1 - COM1 ( 3F8 )\n" );
printf("\t\t\t- 2 - COM2 ( 2F8 )\n" );
printf("\t\t\t- 3 - COM3 ( 3E8 )\n" );
printf("\t\t\t- 4 - COM4 ( 2E8 )\n\n\t\t\t " );
scanf("%d",&NoPort);
if((NoPort==1)||(NoPort==2)||(NoPort==3)||(NoPort==4))
{
}
else
{
printf("\t\tMauvais choix, veuillez vous limiter au choix propos%c!\n\n",aigu);
system("pause" );
flag=1;
}
} while(flag==1);
return(NoPort);
}
/*--------------------------------------------------------------------------*/
/* Initialisation du Port Série */
/*--------------------------------------------------------------------------*/
void Initialiser(HANDLE hCom, char N_Port[4+1])
{
BOOL retour;
//La structure DCB définit les paramétres de transmission de l'UART.
DCB dcb_struct; //Création de la structure Device Control Block
retour = GetCommState(hCom,&dcb_struct); // Vérifier l'existence du port.
if (retour == 0) return;
else
{
dcb_struct.fDtrControl=DTR_CONTROL_DISABLE; // DTR=0
dcb_struct.fRtsControl=RTS_CONTROL_DISABLE; // RTS=0
dcb_struct.fOutxCtsFlow=TRUE; // Par défaut
retour = SetCommState(hCom,&dcb_struct); // Configuration du port avec ces paramètres.
}
}
/*--------------------------------------------------------------------------*/
/* Paramètres de configuration de la liaison série */
/*--------------------------------------------------------------------------*/
void main(void)
{
char carac,NomPort[4+1];
int flag=0,CTS=7,EtatComm=0,state,x,y,z;
BYTE *BufferIn;
HANDLE hCom;
BOOL retour;
DCB dcb_structure; //Création de la structure Device Control Block
DWORD ModemStatus,NbOctetsALire,NbOctetsLus,i;
sprintf(NomPort,"COM%d",Choix_Port()); // Saisie du N° du Port série utilisé
system("CLS" );
// Création du port de communication.
hCom=CreateFile(NomPort,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if (hCom == INVALID_HANDLE_VALUE) //Traitement des erreurs.
{
printf("\n\tErreur d'acc%cs au port S%crie %s\n\n\n",grave,aigu,NomPort);
system("PAUSE" );
return;
}
else
{
Initialiser(hCom,NomPort); // Saisie et affectation des paramétres du port série
PurgeComm(hCom,PURGE_TXCLEAR&PURGE_RXCLEAR); // Vide des tampons d'émission/réception
/*--------------------------------------------------------------------------*/
/* Envoi de caractères saisis au clavier, et lecture des caractères reçus. */
/*--------------------------------------------------------------------------*/
printf("\t\tÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n" );
printf("\t\tº Communication avec le %s º\n",NomPort);
printf("\t\tÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n\n" );
printf("\t( Appuyer sur la touche Ctrl + Q pour sortir de ce programme.)\n\n" );
do
{
if(state!=EtatComm)
{
system("CLS" );
state=EtatComm;
x=(EtatComm&4)>>2;
y=(EtatComm&2)>>1;
z= EtatComm&1;
printf("\t\tÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n" );
printf("\t\tº Communication avec le %s º\n",NomPort);
printf("\t\tÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n\n" );
printf("\t( Appuyer sur la touche Ctrl + Q pour sortir de ce programme.)\n\n" );
printf("\t\tÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n" );
printf("\t\tº RTS = %d DTR = %d CTS = %d º\n",x,y,z);
printf("\t\tÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n\n" );
printf("\t Pour faire commuter RTS %c l'%ctat 1 -> Appui sur 'r'\n",aaxan,aigu);
printf("\t Pour faire commuter RTS %c l'%ctat 0 -> Appui sur 't'\n",aaxan,aigu);
printf("\t Pour faire commuter DTR %c l'%ctat 1 -> Appui sur 'd'\n",aaxan,aigu);
printf("\t Pour faire commuter DTR %c l'%ctat 0 -> Appui sur 's'\n",aaxan,aigu);
printf("\t Pour lire les octets envoy%cs -> Appui sur 'l'\n",aigu);
}
if ( kbhit() )
{
carac=getch();
if (carac=='r')
{
retour = GetCommState(hCom,&dcb_structure); // Init d DCBpour hcom
dcb_structure.fRtsControl=RTS_CONTROL_ENABLE; // RTS=1
retour = SetCommState(hCom,&dcb_structure); // Configuration du port
EtatComm=EtatComm|0x4; // Positionner le bit b2 à 1.
}
else if(carac=='t')
{
retour = GetCommState(hCom,&dcb_structure); // Init d DCBpour hcom
dcb_structure.fRtsControl=RTS_CONTROL_DISABLE; // RTS=0
retour = SetCommState(hCom,&dcb_structure); // Configuration du port
EtatComm=EtatComm&0xFB; // Positionner le bit b2 à 0.
}
if (carac=='d')
{
retour = GetCommState(hCom,&dcb_structure); // Init d DCBpour hcom
dcb_structure.fDtrControl=DTR_CONTROL_ENABLE; // DTR=1
retour = SetCommState(hCom,&dcb_structure); // Configuration du port
EtatComm=EtatComm|0x2; // Positionner le bit b1 à 1.
}
else if(carac=='s')
{
retour = GetCommState(hCom,&dcb_structure); // Init d DCBpour hcom
dcb_structure.fDtrControl=DTR_CONTROL_DISABLE; // DTR=0
retour = SetCommState(hCom,&dcb_structure); // Configuration du port
EtatComm=EtatComm&0xFD; // Positionner le bit b1 à 0.
}
if (carac=='l')
{
retour = GetCommState(hCom,&dcb_structure);
BufferIn= (BYTE*) malloc( NbOctetsALire * sizeof(BYTE));
retour=ReadFile(hCom , BufferIn , NbOctetsALire , &NbOctetsLus , NULL);
for (i=0 ; i<NbOctetsLus;i++)
{
printf("%c",BufferIn[i]); // Affichage à l'écran des octets lus
if (BufferIn[i]==CR) putchar(LF);
}
free ( BufferIn );
}
}
retour=GetCommModemStatus(hCom,&ModemStatus);
flag=MS_CTS_ON & ModemStatus;
if(CTS!=flag>>4)
{
CTS=flag>>4;
if(CTS==1) {EtatComm=EtatComm|0x1;}
else {EtatComm=EtatComm&0xFE;}
}
} while(carac!=0x11); // Caractère de sortie du programme.
}
CloseHandle(hCom); // Fermeture du Handle hCom.
}
/*--------------------------------------------------------------------------*/
/* Lecture sur le port série */
/*--------------------------------------------------------------------------*/