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 ?
Version imprimable
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 ?
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.
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.
C'est pour pourvoir communiquer avec un microcontroleur (PIC16F84).
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.
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.
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 :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.Code:
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);
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 ...
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 ?
Exact. Une communication série doit toujours se faire avec un protocole assez précis.Citation:
Juste une dernière chose, tout cela c'est pour un échange de donnée selon le protocole RS232.
Le port parallèle s'avère plus adéquat.Citation:
Si je veux commander des leds ou un afficheur à cristaux liquide, quelle méthode appliquer ?
Ok pour l'instant je m'attacherais à travailler sur le port serie. Merci pour les renseignements.