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 :

port com


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Août 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 5
    Points : 2
    Points
    2
    Par défaut port com
    Salut,
    je vourait savoir si quelqu' un aurai un bou de code qui permet dès qu' il y a une info(30 caractères) sur le port com1 et com2 de la lire et de la mettre ds une variable.
    Merci
    Jérémi :

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 110
    Points : 99
    Points
    99
    Par défaut
    voici un code qui permet de recevoir 1 caractère il suffit de l'appeller autant de fois que necessaire !!!

    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
     
    //D‚finition port
    #define COM1	0
    #define COM2	1
    #define COM3	2
    #define COM4	3
     
    //D‚finition parit‚
    #define PAIRE	24	// 00011000 en binaire
    #define IMPAIRE	8	// 00001000 en binaire
    #define SANS	0	// 00000000 en binaire
     
    /* D‚finition des registres du 8250 */
    int	RBR[4] = {0x3F8, 0x2F8, 0x370, 0x270 },
    	THR[4] = {0x3F8, 0x2F8, 0x370, 0x270 },
    	DLL[4] = {0x3F8, 0x2F8, 0x370, 0x270 },
    	DLH[4] = {0x3F9, 0x2F9, 0x371, 0x271 },
    	IER[4] = {0x3F9, 0x2F9, 0x371, 0x271 },
    	IIR[4] = {0x3FA, 0x2FA, 0x372, 0x272 },
    	LCR[4] = {0x3FB, 0x2FB, 0x373, 0x273 },
    	MCR[4] = {0x3FC, 0x2FC, 0x374, 0x274 },
    	LSR[4] = {0x3FD, 0x2FD, 0x375, 0x275 },
    	MSR[4] = {0x3FE, 0x2FE, 0x376, 0x276 };
     
    /************************* Reception d'un caractŠre *************************/
    unsigned RECEPT_CAR(char port)
    {
    	while  ((inportb(LSR[port])&0x01) != 1);
    	return (inportb(RBR[port]));
    }
    Pour voir qu'il fait noir, on n'a pas besoin d'être une lumière.

    Il faut cueillir les cerises avec la queue. J'avais déjà du mal avec la main !

  3. #3
    Candidat au Club
    Inscrit en
    Août 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    merci,
    le problème c' est que je ne sais pas quand je reçois des données sur le port com, elle peuvent survenir n'importe quand. En fait' c'est pour recevoir des données d' un chrono et dès qu' il y a une arrivé, il envoie le tps.
    @+
    Jérémi

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 110
    Points : 99
    Points
    99
    Par défaut ??
    Est ce que tu connais le nombre de caractère que tu vas recevoir ?

    si : oui tu place la fonction dans une boucle for

    sinon : tu peux trouver une condition d'arret (appuie sur une touch ...ou ce que tu veux) mais la il ne faut pas que la fonction de lecture soit bloquante donc il faut remplacer while par if

    deplus combien de caractère envoie le chrono lors d'une mesure !!!!

    Est ce que tu me comprends ???

    Bon courage

    Si tu as du mal va lire des cours et tutoriels pour bien apprendre la programmation en langage C : http://c.developpez.com/cours/
    Pour voir qu'il fait noir, on n'a pas besoin d'être une lumière.

    Il faut cueillir les cerises avec la queue. J'avais déjà du mal avec la main !

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Si tu travaille sous DOS pur, il est possible d'utiliser une interruption (je sais plus laquelle, je regarderais ce soir si j'y pense) qui est leve a la reception d'une donnee sur un port serie

  6. #6
    Candidat au Club
    Inscrit en
    Août 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 5
    Points : 2
    Points
    2
    Par défaut salut
    je vais recevoir 30 caractère.
    Mon problème c' est que en même temps, je veux pouvoir tapper les numéros de dossard qui arrivent. et je ne veux pas que quand je tape un numéro, cela interrompe ce que je suis en train de faire, je voudrais que cela se mette dans un buffer.
    Pour ce qui est de travailler sous dos, je veux travailler avec une fenêtre de dos ouverte sous win.
    @+
    Jérémi
    PS: je ne sais pas si j' ai été très clair.

  7. #7
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Si tu veux recevoir des donnee et en meme temps taper le numero des dossards, je vois au moins deux solutions.

    * Utiliser l'interruption hard du port serie en detournant le vecteur d'interruption. A chaque fois qu'une donnee arrive tu la lis et la mets dans un buffer. Ainsi la saisie des numeros de dossards sera peu impacter, puisque l'interruption est tres courte.

    * sous windows lancer deux threads ou deux processus, l'n pour la saisie des numeros de dossards, l'autre ecoutant le port serie.

  8. #8
    fd
    fd est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut int
    Si tu veux détourner l'interruption tu dois :

    1 - Initialiser ton UART
    2 - Initialiser ton PIC (irq 4 == com1 == interruption 12 (4+8) ou irq 5 pour com2
    3 - detourner l'it correspondante (12 ou 13 dec.)

    et n'oublie pas a la fin de ton IT d'acquitter le PIC (out 20h,20h si je me souviens bien)

  9. #9
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Un truc en passant, il faut aussi sauvegarder l'ancienne interruption et la remettre en place en sortant du programme.

  10. #10
    fd
    fd est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut pic
    ...et surtout devalider le pic (ou le restaurer)

  11. #11
    Candidat au Club
    Inscrit en
    Août 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 5
    Points : 2
    Points
    2
    Par défaut ah
    salut,
    ça parait bien compliqué tout ça. Ce n' est pas plus simple avec des threads?
    @+ et merci encore
    Jérémi

  12. #12
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Si ca doit etre plus simple, mais tu n'es pas sur de recuperer les donnees sur le port serie au moment exact mais lorsque que le thread a la main. Ce qui ne devrait pas poser de probleme particulier dans ton cas.

  13. #13
    Candidat au Club
    Inscrit en
    Août 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Ca ne devrait pas poser de problème. du moment que l' on ne perde pas les infos, c' est bon.
    @+ et Merci
    Jérémi

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

Discussions similaires

  1. Lister les ports com disponible
    Par dyason dans le forum Général Python
    Réponses: 1
    Dernier message: 16/08/2004, 10h35
  2. lire/écrire sur un port com sans le monopoliser
    Par totofweb dans le forum Windows
    Réponses: 4
    Dernier message: 26/07/2004, 13h23
  3. [socket] envoyer des données vers un port com
    Par Slimer dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 20/07/2004, 17h35
  4. [debutant][Port COM]
    Par Shooter dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 06/07/2004, 09h43
  5. [javaComm]Communication port COM
    Par gui4593 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 04/06/2004, 12h35

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