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

[C] - Manipulation sur variables



  1. #1
    invite3c35244f

    [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
    invite3c35244f

    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
    invite29971eb1

    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

  4. #4
    invite15928b85

    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
    invite3c35244f

    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
    invite15928b85

    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 invite3c35244f dans le forum Électronique
    Réponses: 4
    Dernier message: 27/04/2009, 11h12
  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, 02h54
  3. Réponses: 2
    Dernier message: 07/03/2008, 22h40
  4. [Thermique] Mauvaise manipulation sur chauffe eau.
    Par invite5db8eae8 dans le forum Dépannage
    Réponses: 13
    Dernier message: 05/05/2007, 05h18
  5. Géospace, manipulation de multiples variables.
    Par invitefc84ad56 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 13/02/2005, 12h08
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...