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

Comment faire un masque en C++



  1. #1
    Paulochon

    Comment faire un masque en C++

    Bonjour à tous,

    Voila mon problême est le suivant j'utilise un PORT sur mon ATMEGA165 exclusivement dédié au entrées qui vont commandé mon afffichage, Hors ce que je voudrai faire c'est quand je vais voir se qu'il y a en entrée de mon PORT c'est de regardé que la valeurs qui m'interesse. Je crois qu'on apelle sa faire un Masque enfin je ne suis pas sur si vous pouviez m'aider je vous en serai reconnaisant, j'espère avoir été assez claire dans mon explication Merci d'avance
    Je me rapelle avoir vu cette fonction en cours, mais sa faisait un moment que je n'avais pas fait de C++ alors y a des chose qui m'échappe un peu et le comble c'est que je ne retrouve pas mes cours sur cet fonction la ,
    On vous remerciant d'avance de votre aide

    Cordialement Paulochon

    -----

    Rien n'est plus proche du vrai que le faux ( Albert Einstein )

  2. Publicité
  3. #2
    PA5CAL

    Re : Comment faire une masque en C++

    Bonjour


    1) Pour savoir si au moins l'un des bits sélectionnés du port est à 0, le masque doit prendre la valeur binaire dont les bits positionnés à 0 complémentent les bits du port placés à la même position et annulent les autres quand on applique un NON-OU arithmétique (NOR).

    En d'autres termes, la valeur binaire du masque doit présenter les bits sélectionnés fixés à 0.


    Par exemple, pour un registre sur 8 bits, si l'on désire tester les bits b0 b2 et b5, le masque doit avoir la valeur :
    M0 = (28 - 1) - (20 + 22 + 25) = (256 - 1) - (1 + 4 + 32) = 218
    Le test à réaliser est:
    Code:
    if ( !(PORT | 218) )
    {
       ...
    }


    2) Pour savoir si au moins l'un des bits sélectionnés du port est à 1, le masque doit prendre la valeur binaire dont les bits positionnés à 1 conservent les bits du port placés à la même position et annulent les autres quand on applique un ET arithmétique (AND).

    En d'autres termes, la valeur binaire du masque doit présenter les bits sélectionnés fixés à 1.


    Par exemple, pour un registre sur 8 bits, si l'on désire tester les bits b0 b2 et b5, le masque doit avoir la valeur :
    M1 = 20 + 22 + 25 = 1 + 4 + 32 = 37
    Le test à réaliser est:
    Code:
    if (PORT & 37)
    {
       ...
    }

    NB : On a la relation :
    Code:
    M0 == ~M1

  4. #3
    Paulochon

    Re : Comment faire une masque en C++

    Merci PA5CAl,
    Pour c'est précision je vais essayé sa, Merci pour ton aide et tes précision

    Cordialement Paulochon
    Rien n'est plus proche du vrai que le faux ( Albert Einstein )

  5. #4
    Paulochon

    Re : Comment faire une masque en C++

    ReBonjour,

    Alors si j'ai bien compri, si je veux testé le Bit0 du PORTB pour savoir si il est a 0 je doit faire,

    If ( !( PINB | 1 ))

    Cordialment Paulochon
    ( est qui é possible de le mettre en hexa ..??)
    Rien n'est plus proche du vrai que le faux ( Albert Einstein )

  6. #5
    Jack

    Re : Comment faire une masque en C++

    Citation Envoyé par Paulochon Voir le message
    ReBonjour,

    Alors si j'ai bien compri, si je veux testé le Bit0 du PORTB pour savoir si il est a 0 je doit faire,

    If ( !( PINB | 1 ))

    Cordialment Paulochon
    ( est qui é possible de le mettre en hexa ..??)
    Ca ne marchera pas, et si ton compilateur est un peu bien fait, il te dira que la condition est toujours fausse. En effet, quelque chose OU 1 est toujours différent de 0, donc vrai. Avec le NOT devant (!), ce sera donc toujours faux.

    PA5CAL a pourtant été clair, il faut un ET pour tester un bit. Il faut masquer les bits non testés en leur faisant correspondre un '0'. Le résultat du ET sera donc nul ou non nul suivant la valeur du bit testé.
    Pour bien comprendre tout ça, il ne faut pas hésiter à prendre une feuille, un crayon de papier et un gomme, même à l'heure de l'ordinateur

    On peut évidemment exprimer les nombres en hexa. Je rappelle que l'hexadécimal est une base, et que changer de base ne modifie pas la valeur du nombre, la quantité donc.

    A+

  7. A voir en vidéo sur Futura
  8. #6
    Paulochon

    Re : Comment faire une masque en C++

    Merci Jack pour ces précision; je poste tout sa quand j'orai fini
    Cordialment Paulochon
    Rien n'est plus proche du vrai que le faux ( Albert Einstein )

  9. Publicité
  10. #7
    PA5CAL

    Re : Comment faire une masque en C++

    Dans le cas du test d'un bit à 0 (cas n°1), on prend la valeur complémentaire. En l'occurence, pour tester le bit0 du registre 8 bits, le masque est:
    (28-1) - 20 = 255 - 1 = 254
    Donc:
    Code:
    If ( !( PINB | 254 ))
    nb : 254 s'écrit 11111110 en binaire

  11. #8
    Paulochon

    Re : Comment faire une masque en C++

    Rebonjour, j'au suivuit les conseil de jack,

    j'ai pris unje feuille de papiers et j'ai posé sa à l'écrit, Alors si j'ai bien compri si on fait une Fontcion ET on diot faire correpondre tout les bit qu'on ne veut pas à 0 et les bit qu'on ve lire à 1

    donc si je veux testé le bit PB0 pour savoir si il est à 0, je doit dire

    if ( PINB & 0x01 )

    Dite moi si c'est bien sa,
    Codialment Paulochon
    Rien n'est plus proche du vrai que le faux ( Albert Einstein )

  12. #9
    Paulochon

    Re : Comment faire une masque en C++

    Oups imaginons que je veux que PB0 soit actif donc a 0,
    puis-je écrirs
    if ( PINB & 0x01== 0x00)

    Cordialment Paulochon
    Rien n'est plus proche du vrai que le faux ( Albert Einstein )

  13. #10
    PA5CAL

    Re : Comment faire une masque en C++

    On écrit:
    Code:
    if ( ( PINB & 0x01 ) == 0x00 )
    ce qui revient à:
    Code:
    if ( !( PINB | 254 ))
    ou:
    Code:
    if ( !( PINB | 0xFE ))
    ou encore:
    Code:
    if ( !( PINB | ~0x01 ))

  14. #11
    Jack

    Re : Comment faire une masque en C++

    if ( PINB & 0x01 )
    Oui, ça c'était pour tester si le bit était à '1'.

    Pour tester s'il est à 0, PA5CAL a résolu ton problème il me semble.

    A+

  15. #12
    Paulochon

    Re : Comment faire une masque en C++

    Merci tout le monde pour votre aide,
    je suis arrivé à mes fin, Avec un bon de papier et un stylo

    Merci à tous,
    Cordialment Paulochon
    Rien n'est plus proche du vrai que le faux ( Albert Einstein )

  16. Publicité

Sur le même thème :

Discussions similaires

  1. Comment bien utiliser son insert ? Comment faire un bon feu ?
    Par anigel dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 140
    Dernier message: 07/11/2008, 08h49
  2. comment faire
    Par oscarie dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 2
    Dernier message: 19/01/2007, 17h43
  3. comment faire?
    Par balo90 dans le forum Chimie
    Réponses: 6
    Dernier message: 14/01/2007, 10h11
  4. comment faire ?
    Par melili52 dans le forum Orientation après le BAC
    Réponses: 2
    Dernier message: 02/09/2004, 09h31