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 :

[horloge] conflit caractère / timer


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 10
    Points : 6
    Points
    6
    Par défaut [Résolu][horloge] conflit caractère / timer
    Bonjour à tous,

    je réalise des programmes de communication série entre 2 PC, dans un de ceux-ci j'envoie juste l'heure à l'autre pc.

    Voici mon code :
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    #include <conio.h>
    #include <stdio.h>
    #include <string.h>
    #include  "a:\Uart.C"
    #define  ECHAP  27
    #define	 XON	17
    #define	 XOFF	19
     
    void main (void)
    {
       int Precedent, RecoitCommande, Commande = XON ;
       struct time t;
       char String[3] ;
     
     
       clrscr() ;                          
       ConfigSerie (COM1, 4800, 8, 0);        /*Configuration du port*/
       outportb (COM1+4, inportb(COM1+4) &~ 0x10); /*comm ente les 2 pcs*/
     
       gettime(&t) ;                          /*Recuperation de l'heure*/
       Precedent = t.ti_sec ;        /*Sauvegarde des secondes*/
     
       do
       {
     
           while (!kbhit())
           {
    	  if ((RecoitCommande = RecoitChar(COM1)) != -1)
    	     Commande = RecoitCommande ;
    	  //si c'est marche on envoie l'heure
    	  if (Commande == XON)
    	  {    while (t.ti_sec == Precedent) /*tant que l'heure change pas*/
    		   gettime(&t) ;  //recuperation de l'heure
     
    	       if (t.ti_hour <= 9)
    	       {
    		  String[0] = '0' ;
    		  itoa(t.ti_hour, String + 1, 10) ; /*convertion entier en string*/
    	       }
    	       else
    		  itoa(t.ti_hour, String, 10) ;
    	       while (!EmetChar(COM1,String[0]));
    	       while (!EmetChar(COM1,String[1]));
     
    	       while (!EmetChar(COM1,':'));
     
    	       if (t.ti_min <= 9)
    	       {
    		  String[0] = '0' ;
    		  itoa(t.ti_min, String + 1, 10) ;
    	       }
    	       else
    		  itoa(t.ti_min, String, 10) ;
    	       while (!EmetChar(COM1,String[0]));
    	       while (!EmetChar(COM1,String[1]));
     
    	       while (!EmetChar(COM1,':'));
     
    	       if (t.ti_sec <= 9)
    	       {
    		  String[0] = '0' ;
    		  itoa(t.ti_sec, String + 1, 10) ;
    	       }
    	       else
    		  itoa(t.ti_sec, String, 10) ;
    	       while (!EmetChar(COM1,String[0]));
    	       while (!EmetChar(COM1,String[1]));
     
    	       Precedent = t.ti_sec ;
    	  }
     
           }
      }
       while (getch() != ECHAP);
    }
    comme vous pouvez voir dans ce code j'envoie l'heure sous la forme suivante hh : mm : ss

    Mon prog marche jusqu'à hh : mm : 58 en fait dès que les secondes passent de 58 à 59 ça ne marche plus.

    Je sais d'où vient le problème, il provient de l'envoi du caractère " : " (58 ASCII) qui crée un décalage de mon horloge. Mais je n'ai aucune idée sur la façon de le corriger

    Merci pour votre attention, Jean
    Ex-Président des reposteurs ;
    Jeune et ancien taverneux à la fois ;
    See you and take good care mates

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 68
    Points : 93
    Points
    93
    Par défaut
    Bonjour,

    Pourriez vous etre plus explicite sur la signification de

    crée un décalage de mon horloge
    Salut

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    voilà ce que ça fait...

    exemple:

    11:29:56
    11:29:57
    11:29:58
    00:11:30
    01:11:30
    02:11:30

    etc...

    Merci de votre attention, Jean
    Ex-Président des reposteurs ;
    Jeune et ancien taverneux à la fois ;
    See you and take good care mates

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 68
    Points : 93
    Points
    93
    Par défaut
    Bonjour,

    Apparemment, il n'y a rien dans votre routine d'emission qui justifierai ce
    decalage, ce ne serai pas a la reception qu'il y aurai un probleme?

    Salut

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci pinpin pour votre aide,

    voici mon code réception... qui me semble assez simple poutant
    pour moi la seule explication qui pouvait entrainer un décalage à la sec 58 était un conflit entre le caractère ':' et mon timer qui entraine une désynchronisation entre les pc
    Je dois avouer que je ne comprend pas trop pourquoi ca créée ce décalage :

    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
     
    #include <conio.h>
    #include <stdio.h>
    #include <string.h>
    #include <dos.h>
    #include "a:UART.C"
    #define ECHAP 27
    #define XON 17
    #define XOFF 19
     
    void main(void)
    {
     
      int i = 0, RCar ;
      unsigned char Touche ;
     
      clrscr();                                       
      ConfigSerie(COM2, 4800, 8, 0);                  
      outportb(COM2+4, inportb(COM2+4) &~ 0x10); // config comm+reception
      _setcursortype(_NOCURSOR) ;                     
      gotoxy(72, 25);                                 
     
      do                                              
      {                                               
           while (!kbhit())                           
           {                                          
    	  if (!((RCar = RecoitChar(COM2)) >> 8))    
    	  {                                         
    		printf("%c", RCar) ;                  
    		i++ ;                                 
    	  }                                         
    	  if (i == 8)                            
    	  {                                      
    		gotoxy(72, 25);                   		
                i = 0 ;                          
    	  }                                       
           }
           if ((Touche = getch()) == XON)         //attente de la touche Xon(17) control Q
    	      while (!EmetChar(COM2, XON)) ; //Emission de Xon (pour la remise en marche)
           if (Touche == XOFF)                  //Attente de la touche Xoff(19) control S
    	     while (!EmetChar(COM2, XOFF)) ; //Emission de Xoff(pour l'arrêt du PC1)
      }
          while ( Touche != ECHAP) ;
    }
    Merci encore pour votre attention, Jean
    Ex-Président des reposteurs ;
    Jeune et ancien taverneux à la fois ;
    See you and take good care mates

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 68
    Points : 93
    Points
    93
    Par défaut
    Bonjour,

    En faisant

    a la place de

    Vous avez le meme probleme?

    Salut

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci pour vos réponses

    Mais j'avais déjà essayé cette substitution sans succès...

    finallement, peut etre que ce n'est juste une désynchro entre les 2 pc...

    Merci encore pinpin.
    Cordialement,Jean
    Ex-Président des reposteurs ;
    Jeune et ancien taverneux à la fois ;
    See you and take good care mates

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Je ne voudrais pas trop insister en ajoutant des lignes de code lourdes et longues...

    Mais je vous montre mon uart.c dans le cas où ce serait lui qui m'apporte cette erreur même si les commandes de debugs non rien donné..

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    #include <dos.h>
     
    #define PAIR       3
    #define IMPAIR     1
    #define SANS_PARITE 0
     
    #define COM1       0x3F8
    #define COM2       0x2F8
    /****** registre de réception ******/
    #define RX         COM
     
    /****** registre d'émission ******/
    #define TX         COM
     
    /****** registre de lise en fonction des interr ******/
    #define CMD_INT    COM+1
     
    /****** diviseur de fréquence ******/
    #define DIV_LSB    COM
    #define DIV_MSB    COM+1
     
    /****** registre indentification interr ******/
    #define ETAT_INT   COM+2
     
    /****** registre de commande de ligne ******/
    #define TRAME      COM+3
     
    /****** registre de contrôle du modem ******/
    #define CMD_MODEM  COM+4
     
    /****** registre d'état de la ligne ******/
    #define STATUS     COM+5
     
    /****** registre d'état du modem ******/
    #define ETAT_MODEM COM+6
     
     
    void ConfigSerie(int Com, int Vitesse, int Nbits, int Parite)
    {
      int diviseur;
     
      outportb (Com+3, 0x80);
      diviseur = (int) (115200L / Vitesse);
      outportb (Com, diviseur & 0x00FF);
      outportb (Com+1, diviseur >> 8);
      outportb (Com+3, (Parite << 3) | (Nbits - 5));
      inportb (Com);
    }
     
    int EmetChar (int Com, char Donnee)
    {
      int Ok = 0 ;
      if (inportb (Com+5) & (0x20))
         {
           outportb (Com, Donnee);
           Ok = -1 ;
         }
      return Ok;
    }
     
    int RecoitChar (int Com)
    {
      int Car = 0;
      if (inportb (Com+5) & (0x01))
         {
           Car = inportb (Com);
         }
      else Car = -1;
      return Car;
    }
    Cordialement, Jean
    Ex-Président des reposteurs ;
    Jeune et ancien taverneux à la fois ;
    See you and take good care mates

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Salut

    Moi ya juste un truc que je compren pas

    La fonction RecoitChar renvoit un caractere je suppose alors pourkoi tu declare RCar comme un int?

    Petre ke ca vient de la

  10. #10
    Futur Membre du Club
    Inscrit en
    Avril 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    non RecoitChar me renvoie un entier int au contraire de la fonction EmetChar

    Dans l'uart je déclare int Car = 0; et la fonction RecoitChar retourne Car donc un entier...
    Ex-Président des reposteurs ;
    Jeune et ancien taverneux à la fois ;
    See you and take good care mates

  11. #11
    Futur Membre du Club
    Inscrit en
    Avril 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    ok merci beaucoup à tous et surtout pinpin de m'avoir aider et d'avoir prêter attention à ce post un peu lourd...

    Mais bon je n'est pas vraiment résolu mon affaire, mais mon programme marche maintenant.
    Juste avec le fait de changer le caractère ':' par un autre caractere du code ascii de valeur décimal > 60 .

    Merci encore pour vos réponse,

    Cordialement, Jean
    Ex-Président des reposteurs ;
    Jeune et ancien taverneux à la fois ;
    See you and take good care mates

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

Discussions similaires

  1. [PPT-2007] Insertion d'une horloge, d'un timer dans un diaporama
    Par jclp75020 dans le forum Powerpoint
    Réponses: 0
    Dernier message: 18/11/2013, 19h09
  2. [Débutant] Timer (tic d'horloge)
    Par Schmidt dans le forum Windows Forms
    Réponses: 4
    Dernier message: 30/03/2013, 11h48
  3. timer ou horloge sous excel ?
    Par bobi357 dans le forum Excel
    Réponses: 2
    Dernier message: 20/05/2009, 17h25
  4. Comment réaliser une horloge numérique grâce au timer 8254 ?
    Par jojo_ol76 dans le forum Autres architectures
    Réponses: 1
    Dernier message: 29/03/2007, 19h56
  5. essaie : timer et horloge
    Par CaptainChoc dans le forum Tkinter
    Réponses: 2
    Dernier message: 15/05/2006, 19h04

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