IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Comment commander le port serie et le port usb à partir du C ?


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Par défaut Comment commander le port serie et le port usb à partir du C ?
    J'aimerais savoir comment à partir du C, on peut commander le port serie et le port USB de l'ordinateur. Faut-il utiliser une librairie spécifique ?

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Bonjour.... salut ça va ? Moi oui et toi ?

    Sais-tu qu'on n'écrit pas en majuscule sur un forum ??
    Et qu'il y a des forums pour la programmation en C ?
    Et qu'il y a un charte à lire, une étiquette à avoir ??

    Et bien, bonne journée.

  3. #3
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Que veux-tu faire avec le port série ? pareil pour le port usb. Sans ces informations, je ne vois pas comment on pourra te répondre.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Par défaut
    C'est pour pourvoir communiquer avec un microcontroleur (PIC16F84).

  5. #5
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Donc c'est pour une communication. Dans ce cas, je recommande le port série (plus simple). Tu dois alors étudier en parallèle le protocole RS232 (utilisé dans une communication série) et la programmation du port série. Voici un lien qui te permettra d'apprendre vite et bien : http://www.aurel32.net/elec/port_serie.php. En ce qui concerne les fonctions d'entrées/sorties, sous Windows tu peux également (et c'est même recommandé) d'utiliser les fonctions dédiées plutôt que IN/OUT, INT ou TERMIOS. Il s'agit des fonctions CreateFile, SetCommState, ReadFile, WriteFile, etc. Le port USB je n'ai jamais touché car je n'en ai jamais ressenti le besoin.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Par défaut
    Je suis allé voir à l'adresse donnée. On parle de BIOS, interruptions et d'adresses.
    j'y vois un peu plus clair mais comment on y a accès à tous ceci, en utilisant les fonctions dédiées dont tu parles ? Faut-il utiliser la librairie API Window ?
    Cela fait peu de temps que je programme en C, j'utilise Code Block sous XP.

  7. #7
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Sous DOS / Win9x, on pouvait déclencher une interruption logicielle à l'aide de la fonction int86, déclarée dans dos.h. Par exemple, pour initialiser le port série (via l'interruption 14h) avec les paramètres : vitesse = 9600 bauds (1 baud = 1 bit/s), parité paire, 2 bits de stop et 8 bits/caractère, on met : 0 dans le registre AH du processeur (fonction 0 : initialisation du port), les paramètres de configuration dans AL (dans notre cas FFh, voir la doc de l'interruption 14h), le numéro du port (0 = COM1) dans DX puis ne reste plus qu'à déclencher l'int 14h. Ce qui se fait en C, avec un compilateur MS DOS, ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #define COM1 0x00
     
    union REGS r; /* Etat des differents registres */
     
    r.h.ah = 0x00;
    r.h.al = 0xFF;
    r.x.dx = COM1;
     
    int86(0x14, &r, &r);
    On peut également programmer le port série à plus bas niveau en accédant directement aux registres internes (via leurs adresses) à l'aide des fonctions inportb (IN) et outportb (OUT). C'est plus compliqué que la méthode précédente mais c'est la méthode universelle car elle adresse directement le matériel, c'est-à-dire sans passer par des services proposés par un logiciel (un système d'exploitation par exemple) particulier.

    Sous Windows XP, Win32 interdit les instructions INT, IN et OUT donc une application Windows ne peut pas utiliser ni l'une ni l'autre des méthodes ci-dessus. Pour utiliser ces méthodes il faut donc créer un exécutable MS-DOS (donc utiliser un compilo DOS) car un tel programme n'est pas exécuté par Win32 mais par NTVDM qui, par chance, permet d'appeler certaines interruptions et de lire/écrire sur certains ports, dont le port série, car il doit pouvoir faire fonctionner les anciennes applications (qui n'hésitaient pas à faire des INT, IN/OUT toutes les secondes ...). Sinon tu peux aussi utiliser les nouvelles fonctions de Windows, je te les ai déjà indiquées : CreateFile (pour récupérer un HANDLE vers le port), SetCommState pour configurer le port (comme le fait la fonction 0 de l'int 14h), ReadFile et WriteFile pour lire et écrire sur le port. A la fin du programme il faut appeler CloseFile (pour fermer le HANDLE retourné par CreateFile). Il faut lire la doc de ces fonctions bien sûr ...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Par défaut
    Je vais retenir la dernière méthode.J'ai trouvé de le doc sur ces fonctions sur msdn.microsoft.com/fr-fr/library.Il faut que j'étudie tout cela en profondeur. Juste une dernière chose, tout cela c'est pour un échange de donnée selon le protocole RS232.Si je veux commander des leds ou un afficheur à cristaux liquide
    quelle méthode appliquée ?

  9. #9
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Juste une dernière chose, tout cela c'est pour un échange de donnée selon le protocole RS232.
    Exact. Une communication série doit toujours se faire avec un protocole assez précis.
    Si je veux commander des leds ou un afficheur à cristaux liquide, quelle méthode appliquer ?
    Le port parallèle s'avère plus adéquat.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Par défaut
    Ok pour l'instant je m'attacherais à travailler sur le port serie. Merci pour les renseignements.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoie d'une commande ASCII via le port serie
    Par Ashelthan dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 21/07/2008, 11h59
  2. [Système] Comment communiquer avec un port serie ou usb en php?
    Par thenightmare1985 dans le forum Langage
    Réponses: 3
    Dernier message: 05/12/2006, 14h12
  3. Réponses: 6
    Dernier message: 04/10/2006, 19h40
  4. Réponses: 4
    Dernier message: 20/09/2006, 15h08
  5. Comment déterminer la fin d'un message sur le port serie ?
    Par zeddy23 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 11/01/2005, 06h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo