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 :

Quelqu'un peut m'expliquer ce programme?


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Quelqu'un peut m'expliquer ce programme?
    Bonjour, est-ce que quelqu'un peut m'expliquer la fin de ce programme?




    Il s'agit d'une carte de télécommande. Elle est composé d'un clavier matriciel de 16 touches. Lors de l'appui sur une touche, un µc prend en compte la touche sélectionné puis envoi un message binaire de 32 bits à la centrale.

    Le programme est en pièce jointe. Merci
    Fichiers attachés Fichiers attachés
    • Type de fichier : txt C.txt (7,3 Ko, 141 affichages)

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    qu'est-ce que tu appelles "la fin de ce programme" ? Une fonction en particulier ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par binoo Voir le message
    Salut,

    qu'est-ce que tu appelles "la fin de ce programme" ? Une fonction en particulier ?
    Salut, hé bien à partir de :

    SOUS PROGRAMME D'ENVOI DU MESSAGE ET DE GESTION DE L'ETAT DE LA PILE


    . Merci

  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 checksum18 Voir le message
    Salut, hé bien à partir de :

    SOUS PROGRAMME D'ENVOI DU MESSAGE ET DE GESTION DE L'ETAT DE LA PILE
    Tu parles de ça (code remis en forme pour être lisible) :
    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    /* ****************************************************************************************** */
    /* SOUS PROGRAMME D'ENVOI DU MESSAGE ET DE GESTION DE L'ETAT DE LA PILE */
    /* Utilise le sous programme d'envoi du message à la centrale */
    /* ****************************************************************************************** */
    /* test de la pile et envoie de la trame */
    void trame_pile (void)
    {
       checksum ();
       message ();
    }
     
    /* ****************************************************************************************** */
    /* SOUS PROGRAMME FAISANT LE CHEKSUM POUR LE DERNIER QUARTET */
    /* ****************************************************************************************** */
    void chesksum (void)
    {
       tableau[7] = 0;
       for (i = 0; i <= 6; i++)
       {
          tableau[7] = tableau[7] = tableau[i];
       }
       tableau[7] = tableau[7] & 0x0f;
    }
     
    /* ****************************************************************************************** */
    /* SOUS PROGRAMME DE TEMPORISATION PARAMETRABLE PAR UN ENTIER */
    /* Pour le 80C51 avec un quartz a 12MHz (ou 80552 de WR kit) */
    /* 11   =>   220 us */
    /* 20   => 360 us */
    /* 29   =>    500 us */
    /* 50   =>    840 us */
    /* 6098   => 80 ms */
    /* ****************************************************************************************** */
    void tempo_courte (int valeur)
    {
       int i;
       for (i = 0; i < valeur; i++)
       {
       }
    }
     
    /* ****************************************************************************************** */
    /* SOUS PROGRAMME D'ENVOI DU MESSAGE A LA CENTRALE */
    /* 1 salve de 10 trames */
    /* ****************************************************************************************** */
    /* envoi du vrai message */
    void message (void)
    {
       char trames = 10;
       char num_quartet, num_bit, quartet_en_cours, quartet_masque;
     
       trames = 10 while (trames)
    /*bit de strart */
       {
          P3_5 = 1;
          tempo_courte (29);
          P3_5 = 0;
          tempo_courte (11);
    /*envoie d'une trame */
     
          for (nu_quartet = 0; num_quartet <= 7; num_quartet++)
          {
             quartet_en_cours = tableau[num_quartet];
             for (num_bit = 0; num_bit <= 3; num_bit++)
             {
                quratet_message = quartet_en_cours & 0x01;
                if (quartet_masque)
    /*bit à 1 */
                {
                   P3_5 = 1;
                   tempo_courte (20);
                   P3_5 = 0;
                   tempo_courte (11);
                }
                else
    /*bit à 0 */
                {
                   P3_5 = 1;
                   tempo_courte (11);
                   P3_5 = 0;
                   tempo_courte (20);
                }
                quartet_en_cours = quartet_en_cours >> 1;
    /* fin du for (num_bit=0 ...) */
             }
    /* fin du for (num_quartet=0 ...) */
          }
    /* bit de stop en fin de trame */
     
          P3_5 = 1;
          tempo_courte (50);
          P3_5 = 0;
    /* tempo inter-trames de 80 ms */
     
    /* fin du while (trames) */
          tempo_courte (6098);
          trames--;
       }
    /* fin de l'envoi du message */
    }
    Qu'est-ce que tu ne comprends pas ? Ce sont les globales qui te troublent ? C'est vrai que grâce à elles, le code est rendu incompréhensible, mais bon, certains se croient malins en codant de façon ésotérique... Sans doute pour éviter l'espionnage par les chinois du FBI...

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Tu parles de ça (code remis en forme pour être lisible) :
    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    /* ****************************************************************************************** */
    /* SOUS PROGRAMME D'ENVOI DU MESSAGE ET DE GESTION DE L'ETAT DE LA PILE */
    /* Utilise le sous programme d'envoi du message à la centrale */
    /* ****************************************************************************************** */
    /* test de la pile et envoie de la trame */
    void trame_pile (void)
    {
       checksum ();
       message ();
    }
     
    /* ****************************************************************************************** */
    /* SOUS PROGRAMME FAISANT LE CHEKSUM POUR LE DERNIER QUARTET */
    /* ****************************************************************************************** */
    void chesksum (void)
    {
       tableau[7] = 0;
       for (i = 0; i <= 6; i++)
       {
          tableau[7] = tableau[7] = tableau[i];
       }
       tableau[7] = tableau[7] & 0x0f;
    }
     
    /* ****************************************************************************************** */
    /* SOUS PROGRAMME DE TEMPORISATION PARAMETRABLE PAR UN ENTIER */
    /* Pour le 80C51 avec un quartz a 12MHz (ou 80552 de WR kit) */
    /* 11   =>   220 us */
    /* 20   => 360 us */
    /* 29   =>    500 us */
    /* 50   =>    840 us */
    /* 6098   => 80 ms */
    /* ****************************************************************************************** */
    void tempo_courte (int valeur)
    {
       int i;
       for (i = 0; i < valeur; i++)
       {
       }
    }
     
    /* ****************************************************************************************** */
    /* SOUS PROGRAMME D'ENVOI DU MESSAGE A LA CENTRALE */
    /* 1 salve de 10 trames */
    /* ****************************************************************************************** */
    /* envoi du vrai message */
    void message (void)
    {
       char trames = 10;
       char num_quartet, num_bit, quartet_en_cours, quartet_masque;
     
       trames = 10 while (trames)
    /*bit de strart */
       {
          P3_5 = 1;
          tempo_courte (29);
          P3_5 = 0;
          tempo_courte (11);
    /*envoie d'une trame */
     
          for (nu_quartet = 0; num_quartet <= 7; num_quartet++)
          {
             quartet_en_cours = tableau[num_quartet];
             for (num_bit = 0; num_bit <= 3; num_bit++)
             {
                quratet_message = quartet_en_cours & 0x01;
                if (quartet_masque)
    /*bit à 1 */
                {
                   P3_5 = 1;
                   tempo_courte (20);
                   P3_5 = 0;
                   tempo_courte (11);
                }
                else
    /*bit à 0 */
                {
                   P3_5 = 1;
                   tempo_courte (11);
                   P3_5 = 0;
                   tempo_courte (20);
                }
                quartet_en_cours = quartet_en_cours >> 1;
    /* fin du for (num_bit=0 ...) */
             }
    /* fin du for (num_quartet=0 ...) */
          }
    /* bit de stop en fin de trame */
     
          P3_5 = 1;
          tempo_courte (50);
          P3_5 = 0;
    /* tempo inter-trames de 80 ms */
     
    /* fin du while (trames) */
          tempo_courte (6098);
          trames--;
       }
    /* fin de l'envoi du message */
    }
    Qu'est-ce que tu ne comprends pas ? Ce sont les globales qui te troublent ? C'est vrai que grâce à elles, le code est rendu incompréhensible, mais bon, certains se croient malins en codant de façon ésotérique... Sans doute pour éviter l'espionnage par les chinois du FBI...

    Je dois modifier ce programme avec les 3 consignes suivantes :


    1) Remplacer les 16 touches par 4 touches :

    Touche 1 : marche (envoi du message correspondant à la centrale)

    Touche 2 : arrêt (envoi du message correspondant à la centrale)

    Touche 3 : Changement de numéro de canal : nous avons à notre disposition 9 canaux allant de 41 à 48, le canal sélectionné à l'initialisation sera 41. Lors de l'appui sur cette touche, le numéro de canal sera incrémenté de 1 (jusqu'à 48 puis repassera à 41).

    Touche 4 : Reset : Lors de l'appui sur cette touche, on réinitialise le numéro de canal 41.


    2) Ajouter un afficheur 7 segments (HDSP-7301) au programme.


    3) Si aucune touche n'a été appuyé depuis plus de 20 secondes, ne pas alimenter l'afficheur, afin d'économiser l'autonomie de la pile. Il faut modifier le programme pour qu'il puisse faire cette procédure.

Discussions similaires

  1. [AC-2003] quelqu'un peut m'expliquer les lignes d'un programme(VBA)
    Par abde17-s dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/04/2011, 10h49
  2. Réponses: 2
    Dernier message: 01/12/2008, 19h33
  3. Réponses: 0
    Dernier message: 10/08/2007, 17h30
  4. [DOM] quelqu un peut m expliquer : getelementbyID
    Par hkahil dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 26/07/2007, 10h01
  5. quelqu'un peut m'expliquer ce "Type"
    Par bassim dans le forum Langage
    Réponses: 9
    Dernier message: 21/01/2007, 15h08

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