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 :

Utilisation des ports de communications


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 7
    Par défaut Utilisation des ports de communications
    Bonjour, j'ai parcouru les anciennes discutions et j'ai pas trouvé de réponse.
    Mon pb est en rapprot avec les ports COM

    Tout d'abord je souhaite faire un petit programme qui s'execute pendant un délais donné (environ 10 secondes) et qui pendant ce temps affiche à l'écran ce qui passe par le COM1.
    En fait, j'arrive pas à inclure la fonction de durée dans ce programme :

    #include <dos.h>
    #include <stdio.h>
    #include <conio.h>

    #define PORT1 0x3F8

    /* Defines Serial Ports Base Address */
    /* COM1 0x3F8 */
    /* COM2 0x2F8 */
    /* COM3 0x3E8 */
    /* COM4 0x2E8 */

    void main(void)
    {
    int c;
    int ch;
    outportb(PORT1 + 1 , 0); /* Turn off interrupts - Port1 */

    /* PORT 1 - Communication Settings */

    outportb(PORT1 + 3 , 0x80); /* SET DLAB ON */
    outportb(PORT1 + 0 , 0x0C); /* Set Baud rate - Divisor Latch Low Byte */
    /* Default 0x03 = 38,400 BPS */
    /* 0x01 = 115,200 BPS */
    /* 0x02 = 57,600 BPS */
    /* 0x06 = 19,200 BPS */
    /* 0x0C = 9,600 BPS */
    /* 0x18 = 4,800 BPS */
    /* 0x30 = 2,400 BPS */
    outportb(PORT1 + 1 , 0x00); /* Set Baud rate - Divisor Latch High Byte */
    outportb(PORT1 + 3 , 0x03); /* 8 Bits, No Parity, 1 Stop Bit */
    outportb(PORT1 + 2 , 0xC7); /* FIFO Control Register */
    outportb(PORT1 + 4 , 0x0B); /* Turn on DTR, RTS, and OUT2 */

    printf("\nSample Comm's Program. Press ESC to quit \n");

    do { c = inportb(PORT1 + 5); /* Check to see if char has been */
    /* received. */
    if (c & 1) {ch = inportb(PORT1); /* If so, then get Char */
    printf("%c",ch);} /* Print Char to Screen */

    if (kbhit()){ch = getch(); /* If key pressed, get Char */
    outportb(PORT1, ch);} /* Send Char to Serial Port */

    } while (ch !=27); /* Quit when ESC (ASC 27) is pressed */
    }

    

    Ensuite, j'aimerai détecter le port de communication qui est branché avec un autre Ordi automatiquement, sachant qu'il y a plusieurs ports qui sont utilisés pour divers choses. Je voudrai savoir lequel est connecté à un PC.

    Merci pour vos réponses.

  2. #2
    Membre chevronné
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    Tu peux t'en sortir en utilisant l'IT28 qui est appelée environ 18 fois / seconde.
    Tu mets un compteur en variable globale.
    Ce compteur est incrémenté par la procédure installée au niveau 28. Ton programme boucle tant que ce compteur est <= 18*10.


    Dans ton code, tu rajoutes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    void interrupt (*oldProcIT28) (); /* pour sauvegarde et remise en place */
    
    long cpt = 0;
    
    
    /* le traitement IT 28 */
    void interrupt procIT28 (){
    if (cpt <= 180)
     cpt ++;
    }
    
    int main(void)
    {
    int c;
    int ch;
    outportb(PORT1 + 1 , 0); /* Turn off interrupts - Port1 */
    
    /* PORT 1 - Communication Settings */
    
    outportb(PORT1 + 3 , 0x80); /* SET DLAB ON */
    outportb(PORT1 + 0 , 0x0C); /* Set Baud rate - Divisor Latch Low Byte */
    /* Default 0x03 = 38,400 BPS */
    /* 0x01 = 115,200 BPS */
    /* 0x02 = 57,600 BPS */
    /* 0x06 = 19,200 BPS */
    /* 0x0C = 9,600 BPS */
    /* 0x18 = 4,800 BPS */
    /* 0x30 = 2,400 BPS */
    outportb(PORT1 + 1 , 0x00); /* Set Baud rate - Divisor Latch High Byte */
    outportb(PORT1 + 3 , 0x03); /* 8 Bits, No Parity, 1 Stop Bit */
    outportb(PORT1 + 2 , 0xC7); /* FIFO Control Register */
    outportb(PORT1 + 4 , 0x0B); /* Turn on DTR, RTS, and OUT2 */
    
    printf("\nSample Comm's Program. Press ESC to quit \n");
    
    
    disable();
    oldProcIT28 = getvect(0x1c);
    setvect(0x1c,procIT28);
    enable();
    
    	
    do { c = inportb(PORT1 + 5); /* Check to see if char has been */
    /* received. */
    if (c & 1) {ch = inportb(PORT1); /* If so, then get Char */
    printf("%c",ch);} /* Print Char to Screen */
    
    if (kbhit()){ch = getch(); /* If key pressed, get Char */
    outportb(PORT1, ch);} /* Send Char to Serial Port */
    
    } while ((cpt <= 180) && (ch !=27)); /* Quit when ESC (ASC 27) is pressed */
    
    /* remise en l'etat de l'IT28 */
    disable();
    setvect(0x1c, oldProcIT28);
    enable();
    }

    Remarque: aucun rapport avec le port COM

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 7
    Par défaut
    Merci beaucoup pour ta réponse je test ça tout de suite.
    Je te tiens au courant.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 7
    Par défaut
    Ok je viens d'essayer et ça marche niquel comme je voulais.
    Merci beaucoup.

    Je sais que ce petit soucis n'est pas vraiment à classer dans les ports de communication mais le prog sur lequel il marche oui et en fait c'est par rapport à mon second pb que j'ai classé ça la dedans.
    Désolé si ça induit en erreur.

    Encore merci pour ta réponse et si tu as une soluce pour l'histoire de la détection du port branché elle est la bienvenue.

    A+

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 7
    Par défaut
    SVP : quelqu'un sais t'il si il y a moyen de détecter la connexion d'un ordi sur un port de communication.....
    Merci pour vos réponses.

    PS : je sais c'est une relance.. mais qui ne tente rien n'a rien, désolé.

  6. #6
    Blue_Strike
    Invité(e)
    Par défaut
    salut,
    tu n'as pas essayer de créer une petite application que tu l'installe dans l'autre machine (que tu veux savoir son port utilisé) pour qu'elle t'envoie le nom du port utilisé?? mais ceci ne sera pas "automatique" comme tu as déjà dis.
    ++

Discussions similaires

  1. Utilisation des ports COM en Java avec RXTX
    Par philippe57460 dans le forum Général Java
    Réponses: 13
    Dernier message: 02/02/2010, 12h18
  2. Réponses: 4
    Dernier message: 21/08/2009, 10h48
  3. utilisation des ports en TCP/IP
    Par omekiane dans le forum Développement
    Réponses: 3
    Dernier message: 06/11/2008, 12h56
  4. Utilisation des ports (serie, usb, etc.)
    Par muslim1987 dans le forum C++
    Réponses: 2
    Dernier message: 08/07/2008, 13h57
  5. Utiliser des ports réservés en utilisateur lambda
    Par devl83 dans le forum Administration système
    Réponses: 2
    Dernier message: 08/11/2007, 09h46

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