Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Déclaration d'une variable un peu spéciale en C



  1. #1
    ThiuT

    Exclamation Déclaration d'une variable un peu spéciale en C


    ------

    Salut à tous !

    Je travaille sur un projet d'écran à diodes commandé par un PIC16f877. Les ports C et E sont utilisées en sortie, le port A en entrée analogique, je compte utiliser le port D pour les entrées provenant d'un interface utilisateur.

    Entre autres, sur ces entrées, il y aura des sélections de plages d'éclairement, de brillance etc... autrement dit certaines entrées seront codées sur plusieurs bits (et commandées par des roues codeuses).

    Ma question est la suivante : est-il possible de déclarer comme variable un groupement de deux ou plusieurs bits quelconques ? en l'occurrence ici des bits du port D. Y a-t-il éventuellement un autre moyen de tester la valeur prise par un ensemble de bits sans les tester l'un après l'autre par des if imbriqués ?

    Merci par avance,
    ThiuT

    -----

  2. #2
    SuperTux

    Re : Déclaration d'une variable un peu spéciale en C


  3. #3
    JPL
    Responsable des forums

    Re : Déclaration d'une variable un peu spéciale en C

    Déplacé : les question sur la programmation de PIC sont généralement mieux placées en Électronique.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  4. #4
    newguy

    Re : Déclaration d'une variable un peu spéciale en C

    Citation Envoyé par SuperTux Voir le message
    tout cela est bien beau, mais je n'ai jamais trouvé de façon de l'utiliser pour y attribuer des pins de différents port d'un PIC. Mes amis du support technique de Microchip non plus d'ailleur.

    Thiut, tu n'auras probablement pas le choix que de le faire "à bras" à chaque fois.
    Il y a toujours un nouveau sur qui on peut mettre le blâme

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

    Re : Déclaration d'une variable un peu spéciale en C

    Il faut faire un masque avant de tester la valeur de ton octet...

    Même si tu arrivais à déclarer une variable comme tu veux, de toute façon, en ASM, le PIC serait obligé de faire le masque.

    Tu peux par contre, te faire une macro qui intègre le masque et l'utiliser comme si...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  7. #6
    ThiuT

    Re : Déclaration d'une variable un peu spéciale en C

    J'étais en train de préparer un post de remerciements, disant que j'allais arreter de me compliquer la vie au lieu de prendre 1minute pour ecrire quelques if imbriqués...

    ...et je viens de me rendre compte que je vais devoir travailler sur des groupements de 4 bits ! (ce qui fait un paquet de if ^^)

    Par chance, j'ai eu quelques idées salvatrices :

    - première idée : mettons que j'aie sur le port B de mon PIC 11000101. Je veux récuperer une valeur entière B codée sur les 4 bits de poids faible et une valeur entiere H codée sur les 4 bits de poids fort. Voici ma méthode :

    int A;
    A=PORTB&"00001111"; // je récupere les 4 LSB (A = 00000101)
    B=A; // et j'ai directement la valeur 5 (0101)
    A=PORTB&"11110000"; // je recupere les 4 MSB (A = 11000000)
    H=A>>4; // H vaut A décalé de 4 bits vers la droite (00001100)
    // soit 12

    - 2ème idée : plus compliquée mais peut etre plus passe partout :
    #bit b0=PORTB.0
    etc... sur les 8 bits du port B
    B = (8*b3) + (4*b2) + (2*b1) + b0;
    H = (8*b7) + (4*b6) + (2*b5) + b4;

    Je vais de ce pas tester ces deux possibilités (et commander d'ores et deja deux roues hexa sur radiospares ^^).

    Merci pour votre aide, si vous avez des suggestions quand à ces deux idées, lachez vous !

  8. #7
    Seb.26

    Re : Déclaration d'une variable un peu spéciale en C

    bah oui, tu fais des masques quoi ...

    > Si tu veux lire certains bit d'un octet, tu fais un AND sur l'octet lu.

    > Si tu veux mettre à 0 certains bits d'un octet, tu fais un AND avec l'inverse des bits à mettre à 0.

    > Si tu veux mettre à 1 certains bits d'un octet, tu fais un OR avec les bits à mettre à 1.

    > Si tu veux inverser certains bits d'un octet, tu fais un XOR avec à 1 les bits à inverser.

    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

Discussions similaires

  1. Commande IR un peu speciale....
    Par limaye dans le forum Électronique
    Réponses: 5
    Dernier message: 04/02/2008, 17h30
  2. équation différentielle un peu spéciale
    Par titilde21 dans le forum Mathématiques du supérieur
    Réponses: 15
    Dernier message: 07/11/2007, 16h03
  3. Déclaration Variable C
    Par jorg1n dans le forum Électronique
    Réponses: 6
    Dernier message: 16/10/2007, 18h01
  4. Déclaration variable en C
    Par jorg1n dans le forum Électronique
    Réponses: 7
    Dernier message: 20/09/2007, 07h45
  5. Force de Magnus un peu spéciale
    Par fromprepa dans le forum Physique
    Réponses: 0
    Dernier message: 30/03/2007, 14h58
Découvrez nos comparatifs produits sur l'informatique et les technologies.