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

Autres éditeurs Discussion :

Réception sur le port série sous DOS avec Borland V3.0


Sujet :

Autres éditeurs

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 8
    Points
    8
    Par défaut Réception sur le port série sous DOS avec Borland V3.0
    Salut à tous
    J'ai réaliser un programme en C avec Borland v3.0 afin de lire sur le port série, et là no problem.
    Par contre je n'arrive pas à envoyer le contenu d'un fichier par ce port, je suis sur de lire le contenu correctement, donc je pense que le transfert n'est pas bon.
    Si quelqu'un à une solution à me proposer ou un peu de temps pour lire mon programme...

    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
     
     
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <conio.h> 
    #include <string.h> 
    #include <bios.h> 
     
     
    #define COM1       0 
    #define DATA_READY 0x100 
    #define TRUE       1 
    #define FALSE      0 
    #define SETTINGS (_COM_9600 | _COM_CHR8 | _COM_STOP1 | _COM_NOPARITY) 
     
    void main(void) 
    { 
      enum { BUF_SZ = 1024 }; 
     
      FILE *tmp, *send; 
      fpos_t *pos; 
      char tab[BUF_SZ]; 
      int i=0; 
     
      clrscr(); 
      _bios_serialcom(_COM_INIT, COM1, SETTINGS); 
      tmp=fopen("datalog.dat","rb"); 
      while ((fread(tab, 1, BUF_SZ, tmp)) != 0); 
      _bios_serialcom(_COM_STATUS, COM1, 0); 
     
       while(tab[i]!=0) 
       { 
          _bios_serialcom(_COM_SEND, COM1,tab[i]); 
          i++; 
       } 
     
      fclose(tmp); 
     
    }
    De plus en approfondissant mes recherches je m'apperçois que lors du premier envoi (càd au démarrage du PC), la transmission se fait correctement.
    Mais après plus rien, je pense donc qu'il ya un problème de libération du port ou quelque chose comme cela..
    Si quelqu'un à une solution

    PS: je travaille sous Borland V3.0

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Réception sur le port série
    Citation Envoyé par jackyjacky
    J'ai réaliser un programme en C avec Borland v3.0 afin de lire sur le port série, et là no problem.
    Oui, l'exemple donné par la doc de Borland C++ 3.x fonctionne... on s'en doutait un peu... Sauf que dans l'exemple (3.1, c'est peut être ça la différence), il est bien indiqué int main(void) ce qui est correct, et non void main(void) qui est faux.
    Par contre je n'arrive pas à envoyer le contenu d'un fichier par ce port, je suis sur de lire le contenu correctement, donc je pense que le transfert n'est pas bon.
    Si quelqu'un à une solution à me proposer ou un peu de temps pour lire mon programme...
    Le problème est qu'avant d'émettre un caractère, tu dois tester si le buffer d'émission est vide. Pour ça, il faut utiliser

    unsigned sts = _bios_serialcom(_COM_STATUS, COM1, 0);

    et tester le bit TSRE (Transmit Shift Register Empty), c'est à dire le bit 14.
    (c'est dans l'aide en ligne : _bios_serialcom / <upper 8 bits>)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #define TX_READY 0x4000 /* TSRE : bit 14 = 1 */
     
       while (!(sts & TX_READY))
       {
          /* Attente active. 
           * Peu recommandable, mais sous DOS sans interruptions, 
           * on ne peut pas faire mieux. 
           */
       }
    Maintenant on peut emettre.

    Il ne faut pas recopier un exemple sans le comprendre. Il vaut mieux demander une explication...
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Merci pour ton aide.
    Je suis entièrement d'accord avec ce que tu m'as envoyé, mais mon problème ne se situe pas là.
    Mon programme tourne quand je le compil (avec tes changements, il tourne de la même façon) le problème est que lorsque je lance le .exe, non seulement il n'ya rien qui se passe mais en plus je ne peux plus utiliser le port série.

    Je pense donc qu'il pourrait aussi y avoir un probleme de fermeture du port après l'execution (équivalent à un closehandle)...
    Si tu as une autre solution..

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par jackyjacky
    Mon programme tourne quand je le compil (avec tes changements, il tourne de la même façon) le problème est que lorsque je lance le .exe, non seulement il n'ya rien qui se passe mais en plus je ne peux plus utiliser le port série.

    Je pense donc qu'il pourrait aussi y avoir un probleme de fermeture du port après l'execution (équivalent à un closehandle)...
    Pas de CloseHandle() sous DOS.
    Quel est ton système?
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Je suis sous win95, mais je dois véritablement m'en tenir au fonction de borland C, surtout pas d'API

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par jackyjacky
    Je suis sous win95, mais je dois véritablement m'en tenir au fonction de borland C, surtout pas d'API
    Pourquoi? Ce serait quand même nettement plus efficace (et moins bricolo ...) Pour W95, tu as Dev-C++ qui te fera ça très bien en mode console Win32 avec l'API Windows.

    Il faut vérifier dans la configuration de Windows que le port (ici COM1, je crois) n'est pas pris par une autre application (acces à distance, souris etc.)
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Je sais que cela serait plus simple mais c'est pour une application qui ne le supportera pas (j'avais essayé un programme de réception avec Visual C++ qui n'a jamais voulu tourné, j'utilisais alors les fonction de l'API createfile, writefile...)
    C'est pour ça que j'ai un problème

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par jackyjacky
    Je sais que cela serait plus simple mais c'est pour une application qui ne le supportera pas (j'avais essayé un programme de réception avec Visual C++ qui n'a jamais voulu tourné, j'utilisais alors les fonction de l'API createfile, writefile...)
    C'est pour ça que j'ai un problème
    En VB, il y a un objet 'communications' qui fonctionne très bien.
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Désolé d'insister, mais je n'ai pas le choix il faut obligatoirement que cela soit en DOS donc avec borland C

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par jackyjacky
    Désolé d'insister, mais je n'ai pas le choix il faut obligatoirement que cela soit en DOS donc avec borland C
    Il est effectivement possible de gérer le port série avec les fonctions de Borland (qui ne sont qu'un wrapper autour des fonctions BIOS INT 14h).
    • Débit limité à 9600 bauds
    • Pas d'interruption matérielle (polling)

    Alors tu voulais faire quoi déjà?
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Mon but est d'envoyer un fichier via le port série
    Après les changements que tu m'avais conseillé, et après quelque manipulation, le programme n'envoi plus rien.
    Je n'arrive pas à savoir si l'ouverture du port série se fait correctement ou si c'est ça qui ne va pas

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par jackyjacky
    Mon but est d'envoyer un fichier via le port série
    Après les changements que tu m'avais conseillé, et après quelque manipulation, le programme n'envoi plus rien.
    Je n'arrive pas à savoir si l'ouverture du port série se fait correctement ou si c'est ça qui ne va pas
    As-tu essayé (à la ligne de commande)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    C:\> mode com1 9600,n,8,1
    C:\> type monfichier > com1
    Ca permet déjà de tester le câble, le composant, les fonctions BIOS etc.
    Y'a quoi en face ?
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Pour le mode dos c'est ok
    Pour la réception, j'utilise un autre PC sur NT lui, ainsi qu'un soft qui fonctionne bien.
    Je pense que mon problème vient de l'ouverture du port
    Si tu as une commande pour ouvrir le port...

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par jackyjacky
    Pour le mode dos c'est ok
    Pour la réception, j'utilise un autre PC sur NT lui, ainsi qu'un soft qui fonctionne bien.
    donc, avec un câble croisé (null-modem) ...
    Je pense que mon problème vient de l'ouverture du port
    Si tu as une commande pour ouvrir le port...
    Tout ce qu'on sait faire, c'est l'initialiser comme tu l'as fait. Je vais essayer de tester ton code... dès que j'ai ce qu'il faut...
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Je confirme pour le cable croisé
    Penses tu que l'on peut ouvrir le port de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    handle=open("com1",O_RDWR|O_BINARY)

  16. #16
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par jackyjacky
    Penses tu que l'on peut ouvrir le port de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    handle=open("com1",O_RDWR|O_BINARY)
    On peut effectivement peut être faire comme ça (pas standard, connait pas...).

    En C-standard, on ferait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include <stdio.h>
       <...>
       FILE *fcom = fopen ("com1", "wb");
    ensuite, on utilise fputc(), et quand c'est fini, fclose().
    Pas de Wi-Fi à la maison : CPL

  17. #17
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    cela pourrait marché pour un port!!!

  18. #18
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par jackyjacky
    cela pourrait marché pour un port!!!
    Oui, essaye, j'ai déjà fait ça il y a longtemps, ça marche (idem type xx > com1)
    Pas de Wi-Fi à la maison : CPL

  19. #19
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    j'ai essayé, mais il ne m'envoi toujours rien sur le port...
    quand à type xx>com1, comment peut on l'inclure dans du langage C???

  20. #20
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par jackyjacky
    j'ai essayé, mais il ne m'envoi toujours rien sur le port...
    C'est curieux...
    quand à type xx>com1, comment peut on l'inclure dans du langage C???
    sprintf()
    system()
    Pas de Wi-Fi à la maison : CPL

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Transmettre un fichier par le port série sous DOS
    Par etiennegaloup dans le forum C
    Réponses: 3
    Dernier message: 04/02/2012, 21h29
  2. Réponses: 7
    Dernier message: 18/07/2011, 17h34
  3. Pb lecture sur port série sous XP SP2
    Par ViveLesQuads dans le forum Delphi
    Réponses: 7
    Dernier message: 09/06/2006, 17h12
  4. Réponses: 7
    Dernier message: 09/06/2006, 10h38
  5. Problème avec le port série sous Windows XP
    Par didou2dek dans le forum Composants VCL
    Réponses: 6
    Dernier message: 02/09/2003, 19h50

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