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

declaration d'un binaire sur PIC



  1. #1
    ABN84

    declaration d'un binaire sur PIC


    ------

    bonjour,
    comment declarer une variable qui ne peux prendre que deux valeurs 0 ou 1? Int et Char sont inutilement grands.
    merci

    -----
    "Engineering is the art of making what you want from what you get"

  2. Publicité
  3. #2
    Seb.26

    Re : declaration d'un binaire sur PIC

    Citation Envoyé par einstein Voir le message
    bonjour,
    comment declarer une variable qui ne peux prendre que deux valeurs 0 ou 1? Int et Char sont inutilement grands.
    merci
    Fais un champ de bit dans un unsigned char, tu en aura 8 ...
    ( voir le .h de ton PIC pour le format )
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  4. #3
    xouiram

    Re : declaration d'un binaire sur PIC

    Salut
    si tu utilises HITECH comme compilateur le contenant bit existe comme int, char, etc. sinon prend la suggestion de la précédente réponse.

  5. #4
    ABN84

    Re : declaration d'un binaire sur PIC

    Citation Envoyé par xouiram Voir le message
    Salut
    si tu utilises HITECH comme compilateur le contenant bit existe comme int, char, etc. sinon prend la suggestion de la précédente réponse.
    interessent!
    peut on declarer "bit" sous MPLAB?
    merci
    "Engineering is the art of making what you want from what you get"

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

    Re : declaration d'un binaire sur PIC

    Citation Envoyé par einstein Voir le message
    interessent!
    peut on declarer "bit" sous MPLAB?
    merci
    Non je crois pas, et de toute façon, ce n'est pas AMA une bonne solution.

    Il faut faire du code ANSI ... Tu me remercieras le jour ou tu changeras de compilo ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  8. #6
    freepicbasic

    Re : declaration d'un binaire sur PIC

    Exemple;

    Code:
    FLAG EQU 0x20
    
    #DEFINE BIT0 FLAG,0
    #DEFINE BIT1 FLAG,1
    #DEFINE BIT2 FLAG,2
    #DEFINE BIT3 FLAG,3
    
    SetBit  macro Bit
          bsf bit
          endm
    
    ResetBit  macro Bit
          bcf bit
          endm
    
    
    main:
      BTFSC PORTB,0
      SetBit BIT0
      BTFSS PORTB,1
      ResetBit BIT1
      BTFSS PORTB,0
      ResetBit BIT0
      BTFSC PORTB,1
      SetBit BIT1
    goto Main
    A+, pat

  9. Publicité
  10. #7
    cherwam07

    Re : declaration d'un binaire sur PIC

    De toute facon même si on peut déclarer un bit seul, le compilo traduira en monopolisant un octet ,il a pas le choix.

    Si ca se trouve (ca me vient a l'esprit pendant que je tape) un compilo bête monopolisera 2 octets si tu déclare 2 bits, etc...

    Donc autant utiliser des char et isoler un bit, d'autant que ca respecte le C ANSI.

  11. #8
    ABN84

    Re : declaration d'un binaire sur PIC

    bonjour,
    voici une fct qui recoit en argument des int (pour l'instant) mais qui sont en realité des bits.
    Code:
    void step_dir(int *a,int *b,int *c,int *d,int *pos){
    	if(*a==0&*b==1&*c==0&*d==1){*a=0;*b=1;*c=1;*d=0;}
    	else if(*a==0&*b==1&*c==1&*d==0){*a=1;*b=0;*c=1;*d=0;}
    	else if(*a==1&*b==0&*c==1&*d==0){*a=1;*b=0;*c=0;*d=1;}
    	else if(*a==1&*b==0&*c==0&*d==1){*a=0;*b=1;*c=0;*d=1;}
    	*pos=*pos+1;
    }
    
    void init(int *a,int *b,int *c,int *d,int *e,int *f,int *g,int *h,int *capt1,int *capt2,int *pos1,int *pos2){
        while(*capt1!=1){
            step_dir(*a,*b,*c,*d,*pos1);
            delay_ms(100);
        }
        while(*capt2=1){
            step_dir(*e,*f,*g,*h,*pos2)
            delay_ms(100);
        }
        *pos1=0;
        *pos2=0;
    }
    
    void main(void)
    {
         TRISD=0b00000000;
         TRISC=0b00000111;
         int position1,position2;
         while(1){
            if(RC2==1){init(RD0,RD1,RD2,RD3,RD4,RD5,RD6,RD7,RC0,RC1,position1,position2);}
    
    
         }
    
    		
    }
    Donc autant utiliser des char et isoler un bit, d'autant que ca respecte le C ANSI.
    ça tombe bien, j'ai 8 bits (a-h).
    comment je peux changer ma declaration?
    merci
    "Engineering is the art of making what you want from what you get"

  12. #9
    cherwam07

    Re : declaration d'un binaire sur PIC

    ça tombe bien, j'ai 8 bits (a-h).
    Ben super, tu peux donc faire un truc du genre :
    Code:
    char lesBits; 
    ...
    ...
    /* Test du bit 0 : */
    if(lesBits & 0x01)
    {
         /* Le bit 0 est à 1 */
    }
    else
    {
         /* Le bit 0 est à 0 */
    }
    
    /* Test du bit 3 */
    if(lesBits & 0x0F)
    {
         /* Le bit 3 est à 1 */
    }
    else
    {
         /* Le bit 3 est à 0 */
    }
    Bon courage

  13. #10
    Seb.26

    Re : declaration d'un binaire sur PIC

    Voila, ce que j'utilise ne général :

    Code:
    #define uChar unsigned char
    typedef union _uChar_b {
      struct {
        unsigned b0:1;
        unsigned b1:1;
        unsigned b2:1;
        unsigned b3:1;
        unsigned b4:1;
        unsigned b5:1;
        unsigned b6:1;
        unsigned b7:1;
      };
      uChar value;
    };
    #define uChar_Bits union _uChar_b
    Et tu utilise comme cela :

    Code:
    uChar_Bits Toto;
    //
    #define flag0 			(Toto.b0)
    #define flag1 			(Toto.b1)
    
    [...]
    
    //init des flag
    Toto.value = 0x00;
    
    [...]
    if( flag0 )
      flag1 = 0;
    else
      flag0 = 0;
    Test, c'est du pifomètre là aussi ...

    Si tu préfère complètement masquer l'union, tu peux aussi faire :
    Code:
    uChar_Bits _Toto;
    #define Toto                    (_Toto.value)
    #define flag0                   (_Toto.b0)
    #define flag1                   (_Toto.b1)
    
    //
    Toto = 0x00;
    Dernière modification par Seb.26 ; 19/03/2008 à 12h17.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  14. #11
    ABN84

    Re : declaration d'un binaire sur PIC

    merci à tous,
    autre question: ma facon d'utiliser les pointeurs est elle correcte svp?
    merci
    "Engineering is the art of making what you want from what you get"

  15. #12
    cherwam07

    Re : declaration d'un binaire sur PIC

    Niet !

    En entrée de ta fonction init tu as des pointeurs sur des entiers. Donc quand tu appel la fonction, tu dois y mettre dedans l'ADDRESSE d'un entier.
    Donc l'appel serait plutot :
    Code:
    init(&RD0, &RD1, ...);
    Puis vient l'appel de step_dir, cette fonction prend en parametre également des pointeurs sur des entiers, or : e, f, g,... sont déja des pointeurs, donc l'appel se ferait plutot comme ceci :
    Code:
    step_dir(e,f,g,...)

    Par contre :
    Code:
        while(*capt1!=1)
        while(*capt2=1)
        *pos1=0;
        *pos2=0;
    Ca c'est juste, tu t'interesse bien à CE QUI EST POINTE.
    Pareil dans la fonction step_dir, l'utilisation est bonne.

    Conclusion tu t'es juste un petit peu mélangé dans les appels de fonction.

    Bon courage

  16. Publicité

Discussions similaires

  1. 2,5 V sur l'input d'un PIC ???
    Par Voltron dans le forum Électronique
    Réponses: 23
    Dernier message: 08/09/2007, 19h05
  2. Fort courent sur uen entrée d'un PIC
    Par Djludo dans le forum Électronique
    Réponses: 10
    Dernier message: 23/05/2007, 21h26
  3. Aide sur les variables d'un PIC
    Par Acidmaster dans le forum Électronique
    Réponses: 4
    Dernier message: 12/06/2006, 18h17
  4. Réponses: 24
    Dernier message: 11/05/2006, 14h07
  5. Tracé d'un diagramme binaire (urgent !)
    Par grisouille dans le forum Chimie
    Réponses: 2
    Dernier message: 24/03/2005, 20h28
Découvrez nos comparatifs produits sur l'informatique et les technologies.