[C] - Manipulation sur variables
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

[C] - Manipulation sur variables



  1. #1
    jorg1n

    [C] - Manipulation sur variables


    ------

    Bonjour,

    je suis actuellement entrain d'essayer de rédiger des routines pour communiquer entre un PIC18 et une horloge DS1306 en liaison SPI.
    J'ai pour le moment réussi a écrire les routines d'écriture et de lecture, mais ce n'est pas encore testé.

    Par contre, je dois effectuer un travail sur les mots de 8 bits récupérés lors de la lecture du registre concerné, car le chiffre des dizaines est dans le poids fort du mot de 8 bits, et les unités, dans le poids faible.
    Exemple:

    Je récupère pour les 35 minutes sur 8 bits:

    Bit 7 6 5 4 3 2 1 0
    0 0 1 1 0 1 0 1
    (3) | (5)

    Je pense donc réaliser cela:

    DS1306_Min = ((DS1306_Min & 0xF0)>> 4)*10 + (DS1306_Min & 0x0F);
    Qu'en pensez vous?

    Par contre, dans le cas inverse, si je veux écrire.
    J'ai une variable image des minutes qui varie de 0 à 59, comment faire pour la mettre en forme pour avoir les dizaines sur le poids fort et les unités sur le poids faibles?

    J'espère avoir été assez clair dans mon explication...

    Merci d'avance pour votre aide

    -----

  2. #2
    jorg1n

    Re : [C] - Manipulation sur variables

    En fait, c'est de la conversion héxa -> décimal et décimal -> héxa.

    Donc pour ma conversion héxa -> décimal, je pense faire cela:
    Code:
    unsigned char  DS1306_Min;
    
    DS1306_Min = ((DS1306_Min & 0xF0)>> 4)*10 + (DS1306_Min & 0x0F);
    Par contre pour la conversion décimal -> héxa, je ne sais pas trop, j'ai vu que le principe, c'est la division par 16, mais j'iamgine qu'il y a une fonction toute faite, mais où?
    Dans le compilateur C18? je vais regarder...

    Merci d'avance pour votre aide

  3. #3
    ftorama

    Re : [C] - Manipulation sur variables

    c'est un codage type BCD (Binary Coded Decimal); Je ne connais pas ton compilo, mais recherche ce mot-clé, ça devrait aider
    Quand un homme a faim, mieux vaut lui aprendre à pecher que de lui donner un poisson.

  4. #4
    Fanch5629

    Re : [C] - Manipulation sur variables

    Bonjour.

    Sans l'avoir testé, la conversion

    DS1306_Min = ((DS1306_Min & 0xF0)>> 4)*10 + (DS1306_Min & 0x0F);

    paraît correcte. Le masquage par 0xF0 n'est cependant pas nécessaire : les quatre bits de poids faibles seront de toute façon éliminés par le décalage à droite.

    Pour la conversion inverse, il faudrait utiliser l'opérateur modulo ( % ) de la façon suivante :

    DS1306_Min = ( DS1306_Min / 10 ) << 4 + ( DS1306_Min % 10 )

    calcul des dizaines par une division entière et décalage de 4 bits à gauche, puis sommation avec les unités.

    Pas certain que toutes ces parenthèses soient nécessaires, mais cela ne coûte rien de les mettre.

    A tester, bien sûr !

    Cordialement.

  5. A voir en vidéo sur Futura
  6. #5
    jorg1n

    Re : [C] - Manipulation sur variables

    Merci !!! ça marche....

    Par contre, il fallait rajouter 2 parenthèses:
    Code:
    DS1306_Min = (( DS1306_Min / 10 ) << 4)+ ( DS1306_Min % 10 )
    Merci encore....

  7. #6
    Fanch5629

    Re : [C] - Manipulation sur variables

    Re.

    Effectivement, je ne m'étais pas soucié de la priorité des opérateurs. L'âge, sans doute ...

    Heureux d'avoir pu aider.

    @+

Discussions similaires

  1. [C] - Problèmes de manipulation de variables de type float
    Par jorg1n dans le forum Électronique
    Réponses: 4
    Dernier message: 27/04/2009, 10h12
  2. Influence des variables d'une fonction à 2 variables
    Par invitee2a62e92 dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 18/07/2008, 01h54
  3. Réponses: 2
    Dernier message: 07/03/2008, 21h40
  4. [Thermique] Mauvaise manipulation sur chauffe eau.
    Par invite5db8eae8 dans le forum Dépannage
    Réponses: 13
    Dernier message: 05/05/2007, 04h18
  5. Géospace, manipulation de multiples variables.
    Par Keorl dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 13/02/2005, 11h08
Découvrez nos comparatifs produits sur l'informatique et les technologies.