declaration d'un binaire sur PIC
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

declaration d'un binaire sur PIC



  1. #1
    invitec35bc9ea

    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

    -----

  2. #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. >>

  3. #3
    invite9d3f5cd9

    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.

  4. #4
    invitec35bc9ea

    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

  5. A voir en vidéo sur Futura
  6. #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. >>

  7. #6
    invitef86a6203

    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

  8. #7
    invite0e5af214

    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.

  9. #8
    invitec35bc9ea

    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

  10. #9
    invite0e5af214

    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

  11. #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 à 13h17.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  12. #11
    invitec35bc9ea

    Re : declaration d'un binaire sur PIC

    merci à tous,
    autre question: ma facon d'utiliser les pointeurs est elle correcte svp?
    merci

  13. #12
    invite0e5af214

    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

Discussions similaires

  1. 2,5 V sur l'input d'un PIC ???
    Par invite86ffa844 dans le forum Électronique
    Réponses: 23
    Dernier message: 08/09/2007, 20h05
  2. Fort courent sur uen entrée d'un PIC
    Par invite84109e98 dans le forum Électronique
    Réponses: 10
    Dernier message: 23/05/2007, 22h26
  3. Aide sur les variables d'un PIC
    Par invite83652f77 dans le forum Électronique
    Réponses: 4
    Dernier message: 12/06/2006, 19h17
  4. Réponses: 24
    Dernier message: 11/05/2006, 15h07
  5. Tracé d'un diagramme binaire (urgent !)
    Par invite494ad0d2 dans le forum Chimie
    Réponses: 2
    Dernier message: 24/03/2005, 21h28
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...