Comment faire un masque en C++
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Comment faire un masque en C++



  1. #1
    invite55fe29e6

    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

    -----

  2. #2
    invite936c567e

    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

  3. #3
    invite55fe29e6

    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

  4. #4
    invite55fe29e6

    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 ..??)

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    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. #6
    invite55fe29e6

    Re : Comment faire une masque en C++

    Merci Jack pour ces précision; je poste tout sa quand j'orai fini
    Cordialment Paulochon

  8. #7
    invite936c567e

    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

  9. #8
    invite55fe29e6

    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

  10. #9
    invite55fe29e6

    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

  11. #10
    invite936c567e

    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 ))

  12. #11
    Jack
    Modérateur

    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+

  13. #12
    invite55fe29e6

    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

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, 09h49
  2. comment faire
    Par invited6f9fac5 dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 2
    Dernier message: 19/01/2007, 18h43
  3. comment faire?
    Par invitecdc9e01f dans le forum Chimie
    Réponses: 6
    Dernier message: 14/01/2007, 11h11
  4. comment faire ?
    Par invited3630410 dans le forum Orientation après le BAC
    Réponses: 2
    Dernier message: 02/09/2004, 10h31
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...