Gerer les bits d'une variable avec C18
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Gerer les bits d'une variable avec C18



  1. #1
    invite958adb57

    Question Gerer les bits d'une variable avec C18


    ------

    Salut à tous, depuis peu je me suis mis au C pour programmer les PIC de la série 18 (grâce au compilateur C18 fourni sur le site de microchip).
    Un problème se pose: je n'arrive pas à gérer les bits d'une variable.

    En assembleur, c'est facile:

    bsf variable_X,2 ; forcer bit 2 de la variable_X
    btfss variable_X,2 ; tester bit 2 de la variable_X
    xxxxx
    xxxxx etc...

    Mais sur C18, j'ai trouvé comment manipuler les bits des registres mais pas des variables:
    pour placer RA1 à 1 il faut faire:

    PORTAbits.RA1 = 1; // Placer RA1 à l'état haut
    if (PORTAbits.RA1 == 1) goto suivant; // Si RA1 = 1 on saute
    xxxxx

    mais comment faire pour les bits d'une variable ??? J'ai éssayé:

    variable_X.1 = 1; // forcer bit 1 à l'état haut de la variable_X
    variable_X,1 = 1;
    variable_X.bit.1 = 1;
    variable_X.bit,1 = 1;
    variable_X.bits.1 = 1;
    variable_X.bits,1 = 1;
    bit.variable_X,1 = 1;
    bit.variable_X.1 = 1;
    bits.variable_X,1 = 1;
    bits.variable_X.1 = 1;

    Rien n'y fait j'ai systématiquement une erreur lors de la compilation.
    Si quelqu'un pouvait me dépanner ça serait sympa.

    @++
    Louis

    -----

  2. #2
    invite4c7a167b

    Re : Gerer les bits d'une variable avec C18

    Salut Louis !
    Passage d'un bit à 1 dans une variable
    Code:
    variable |= 0x01 /* bit 1 à 1 */
    variable |= 0x02 /* bit 2 à 1 */
    variable |= 0x04 /* bit 3 à 1 */
    variable |= 0x08 /* bit 4 à 1 */
    variable |= 0x10 /* bit 5 à 1 */
    variable |= 0x20 /* bit 6 à 1 */
    variable |= 0x40 /* bit 7 à 1 */
    variable |= 0x80 /* bit 8 à 1 */
    Passage d'un bit à 0 dans une variable
    Code:
    variable &= 0x01 /* bit 1 à 0 */
    variable &= 0x02 /* bit 2 à 0 */
    variable &= 0x04 /* bit 3 à 0 */
    variable &= 0x08 /* bit 4 à 0 */
    variable &= 0x10 /* bit 5 à 0 */
    variable &= 0x20 /* bit 6 à 0 */
    variable &= 0x40 /* bit 7 à 0 */
    variable &= 0x80 /* bit 8 à 0 */

    Citation Envoyé par LouR56
    PORTAbits.RA1 = 1; // Placer RA1 à l'état haut
    Regarde dans le fichier .h de ton pic tu verras que PORTAbits est une strcuture composé de champs de bit et c'est pour cette raison que ça fonctionne avec les registres.

  3. #3
    invite958adb57

    Re : Gerer les bits d'une variable avec C18

    Merci beaucoup.
    Est-ce que je peux t'embêter encore en te demandant comment tester un ou plusieurs bits d'une variable ?

    J'ai trouvé cette méthode:

    variable_1 = 0b00000001; // Bit1 à 1
    variable_2 = 0b00010000; // Bit5 à 1
    if ((variable_1 & 0x01 == 1) && ((variable_2 & 0x10) >> 4 == 1)) //si bit1 de
    goto saut1 //variable_1 et bit 5 de variable_2 sont à 1, on saute
    xxxxx

    @++
    Louis

  4. #4
    invite4c7a167b

    Re : Gerer les bits d'une variable avec C18

    Bonjour,
    Excuse moi pour le retard, j'ai beaucoup de travail. Alors si c'est toujours d'actualité tu peux faire comme ça (tu n'étais pas loin) mais on peut faire plus simple.


    Code:
    variable_1 = 0b00000001; // Bit1 à 1
    variable_2 = 0b00010000; // Bit5 à 1
    
         //si bit1 de variable_1 et bit 5 de variable_2 sont à 1, on saute
         if ((variable_1 & 0x01) && (variable_2 & 0x10))           
              goto saut1 
    ...
    La méthode que tu as posté marche mais fait perdre du temps en faisant ((variable_2 & 0x10) >> 4 == 1)). Pour un simple test c'est inutile même si ça parâit une démarche logique de faire ce décalage à droite.

    Mon code résonne comme suit :
    Si le bit1 de variable_1 et bit 5 de variable_2 valent autres choses que 0 (1, 16, 4, 32... peut importe) alors on saute.
    En C un "vrai" est tout sauf 0. C'est à dire :
    0 = faux
    1 = vrai
    12 = vrai
    2 = vrai
    65535 = vrai
    ...

    Je ne sais pas si j'ai été clair ? Sinon dit le je te posterai un nouveau post très détailé.
    A bientôt,
    Vincent

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

    Re : Gerer les bits d'une variable avec C18

    Merci bien pour ces réponses, tu a été très clair et tu me sors d'une petite galère (au pire je serais passé par de l'assembleur pour tester les bits mais c'est plus marrant de savoir le faire en C).

    @++
    Louis

Discussions similaires

  1. Gérer l'affichage avec XLCD.C/Maestro software
    Par invite3c35244f dans le forum Électronique
    Réponses: 1
    Dernier message: 04/10/2007, 23h34
  2. gérer deux moteurs avec PIC
    Par invitee601b486 dans le forum TPE / TIPE et autres travaux
    Réponses: 6
    Dernier message: 25/01/2007, 21h12
  3. Somme d'une suite avec un nombre de termes variable
    Par inviteaa60f5ee dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 11/09/2006, 13h57
  4. Projet:Gérer un pupitre avec Labview
    Par invite13785308 dans le forum Électronique
    Réponses: 0
    Dernier message: 11/12/2005, 13h42
  5. Convertir 12 bits série en 7 bits paralléle avec un HC11 ?
    Par invite0ee134f7 dans le forum Électronique
    Réponses: 2
    Dernier message: 03/03/2005, 09h39
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...