Gestion du port série ( COM) sous Windows Pour piloter des applications à parti
Gestion du port série ( COM) sous Windows Pour piloter des applications à partir d'un ordinateur le port série présente de nombreux avantages en particulier il est très bien protégé contre les fausses manœuvres et autorise la connexion et déconnexion lorsque l'ordinateur est sous tension ( pour les machines récentes ,ce n'est pas vrai pour la plupart les vieux PC équipés de microprocesseurs antérieurs au Pentium, fonctionnant sous DOS ) , enfin un courant d'intensité notable (10mA) est disponible sur chaque broche et peut servir à alimenter de petites applications. Le port série utilise un connecteur 9 broches (DB9), souvent 25 broches pour COM2 , dont les accès sont les suivants Broche DB9 Broche DB25 Sens Nom Fonction 1 Entrée DCD(Data Carrier Detect) Détection porteuse 2 3 Entrée RXD ou RD( Receive Data) Réception 3 2 Sortie TXD ou TD( Transmet Data) Emission 4 20 Sortie DTR( Data Terminal Ready) Terminal prêt 5 7 Masse 6 6 Entrée DSR( Data set ready) Emission prête 7 4 Sortie RTS(Request to Send) Demande d'émission 8 5 Entrée CTS(Clear to send) Prêt à emettre 9 Entrée RI( Ring indicator) Sonnerie La norme RS232 qui est associé à ce type de port est très complexe et rarement utilisée en électronique. Le plus souvent l'échange d'octets s'effectue sur les seuls fils RXD et TXD . Dans ce cas les signaux d'échange doivent être simulés , DSR relié à DTR et RTS relié à CTS . Le câble de liaison entre deux ordinateurs ou entre ordinateur et application est alors le suivant : Il faut se souvenir que les signaux disponibles sur ce port n'ont pas le niveau TTL . Etat de repos 1 typiquement -10V ( entre -3 et -15V= Etat de travail 0 typiquement +10V ( entre 3 et 15V ) L'envoi d'un octet commence par un bit de start ( niveau travail ) suivi des 8 bits de l'octet suivis ou non d'un bit de parité et terminé par 1 1;1/2 ou 2 bits de stop ( niveau repos ) . Par exemple pour l'envoi de C5H = 11000101 Les vitesses de transmission sont normalisées 110 150 300 600 1200 2400 4800 9600 19200 bits/secondes (Bauds) Pour l'association avec un microprocesseur une conversion de ce signal aux niveaux TTL est nécessaire .Les circuits MAX232 ou équivalents sont parfaitement adaptés à ce travail. Alimentés en 5V ils fabriquent en interne le ±10V nécessaire . ( circuit à pompe de charge ) . Sous DOS Pour développer des applications électroniques les vieilles machines incapables d'accueillir les logiciels récents sont encore bien pratiques Dans ce type de micro ordinateur le circuit de gestion de la liaison série est un UART ( 8250) contenant un certain nombre de registres. A l'émission ce sont les registres dans lequel se trouve le caractère à émettre (Tampon d’émission ) et celui qui contient l'octet en cours d’émission . A la réception on trouve de même un registre dans lequel se trouve l'octet en cours de réception et celui contenant le dernier caractère reçu. .(Tampon de réception ). Le transfert est défini par: - Un registre de définition de la vitesse et des paramètres nécessaires - Un registre d'état. Le registre d’Initialisation se trouve à l'adresse $03BF ( pour COM1 , $02BF pour le COM2) il a la configuration représentée dans les tableaux suivants: Le bit 7 joue un rôle important, il permet l'accès au registre définissant la vitesse .Ce registre de vitesse de 16 bits se trouve localisé aux adresses $3F8 et $3F9 mais n'est accessible que si le bit précédent est à 1 . En fonction de la vitesse désirée le mot à charger est indiqué dans le tableau ci contre.: Le registre d’adresse $3FB définit le format du transfert son contenu est détaillé dans le tableau suivant : Contenu du registre 3FB 7 6 5 4 3 2 1 0 3FB 0 0 1 1 0 1 0 1 Nombre de bits de données 5 6 7 8 0 1 ⇒ ⇒ ⇒ ⇒ Bits de Stop 1 bit de stop Si 5 bits de données 1,5 bit de stop Autre cas 2 stops bits 0 1 ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ Parité pas de bit de parité 1 bit de parité 0 1 ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ Type de parité Parité impaire Parité paire 0 1 ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ Parité fixe parité dépendant de l'octet (Si bit 3 à 1) Parité fixe 0 1 ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ Break forcé inutilisé envoie 0 sur tous les bits à émettre 0 1 ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ Accès au registre de vitesse accès aux autres registres accès au registre de vitesse Le registre d'état se trouve à l'adresse $03FD 0 1 si un octet est dans le tampon de réception 1 1 si erreur d'écrasement 2 1 si erreur de parité ( Attention ce bit est RAZ par la lecture ) 3 1 si erreur de trame 4 1 si détection d'un break Vitesse = F0 / Baud rate divisor Vitesse (Bauds) Baud rate divisor 1200 $0060 2400 $0030 4800 $0018 9600 $000C 19200 $0006 5 1 si le tampon d'émission est vide 6 1 si le registre d'émission est inoccupé Si le flag de réception (bit 0) est à 1 cela veut dire qu'une donnée peut être lue dans le tampon de réception . Il faut la récupérer puis remettre ce flag à 0 avant que la donnée suivante vienne écraser la précédente. Quand le flag d'émission (Bit 5) est à 1 l'envoi de la donnée est terminée Après avoir mis ce flag à 0 on peut placer la donnée suivante dans le tampon d'émission. Le registre tampon qui sert à l'émission et la réception est à l'adresse $03F8, il s'agit d'un registre qui se trouve à la même adresse que le registre de vitesse mais s'en distingue par l'état du bit 7 de $3FD .L’accès à ce tampon exige que ($3FD)-7 (Le DLBA) soit au 0. La gestion du transfert peut se faire par interruption ou plus aisément par scrutation du registre d'état. Le registre d’adresse 3F9 accessible avec DLAB=0 contient des informations sur les interruptions associées au circuit 8250 .Dans certains cas comme nous le verrons plus loin il est souhaitable de désactiver ces interruptions en chargeant 00000000 dans ce registre. Attention :Si on utilise seulement 3 fils RXD TXD et Masse, il relier faut ensembles - Request to Send et Clear to Send (RTS-CTS) - Data Set Ready et Data Terminal Ready (DSR-DTR) D'ou le logiciel de gestion: ( en Pascal) Initialisation : Port[$3FB]:=$80; accès au registre de vitesse PortW[$3F8]:=$000C; Init 9600 bauds Port[$3FB]:=$03; Init 8b,1bs,NoP Residu:=Port[$3F8]; Pour vider le tampon . Residu est un octet Lecture d'un octet arrivant vers le PC Repeat Res:=Port[$3FD] AND $01; Attente d'arrivée Until Res=$01; bit 1 de 3FD DATA:=Port[$08] La donnée lues'appelle DATA Envoi d'un caractère sur le bus Repeat Res:=( Port[$3FD] AND $20 ); Attente de tampon Until Res=$20 d'émission vide bit 5 de 3FD; Port[$3F8]:=DATA ; DATA est l'octet à envoyer SIGNAL DB25 DB9 Masse Emission TXD Réception RXD RTS CTS DSR DTR 7 2 3 4 5 6 20 5 3 2 7 8 6 4 1 5 6 9 Prise DB9 d'un PC vue arriére ou coté soudure de la fiche femelle au bout du cable liaisons à assurer sur la fiche femelle Sous Windows A partir de Windows 95 , pour des raisons de sécurité , l'accès aux ports est impossible directement, il faut utiliser les routines du système d'exploitation ce qui rend l'utilisation du port série bien plus délicate. C'est pour cette raison que nombre d'applications qui tournaient sous DOS ne fonctionnent plus sur les machines modernes. Si la manipulation des routines de Windows écrites en C n'est pas à la portée de tout le monde , certains développeurs ont fait heureusement le travail pour nous et il existe des DLL (Dynamic Links Librairy) exploitable par des programmes tels que DELPHI , VISUAL BASIC ou VISUAL C++ qui permettent d'accéder au port série. Pour DELPHI la DLL la plus connue est TComPort , elle est parfaitement adaptée à la gestion du port série suivant la norme RS232, un peu moins bien pour la gestion bit par bit qui intéresse l'électronicien. Un programmeur allemand Burkhard Kainka a écrit en 1999 un livre traitant de ces questions qui est malheureusement épuisé , mais les DLL nécessaires pour la gestion du port série contenues dans un fichier Rscom.DLL sont téléchargeable sur son site .Ces routines sont particulièrement bien adaptées à un usage électronique, elles permettent non seulement l'échange d'octets par un processus type RS232 mais aussi la gestion individuelle des bornes du port. Un exemple simple est donné par Yoann dans http://delphipage.free.fr/portserie.html , c'est d'ailleurs grâce à cet article que j'ai découvert rscom . La DLL est constituée de plusieurs fonctions et procédures ,parmi lesquelles uploads/Industriel/ port-serie.pdf
Documents similaires










-
37
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Fev 22, 2022
- Catégorie Industry / Industr...
- Langue French
- Taille du fichier 0.1899MB