Programmation PIC opérateur
Répondre à la discussion
Affichage des résultats 1 à 18 sur 18

Programmation PIC opérateur



  1. #1
    leoleoleo24

    Programmation PIC opérateur


    ------

    Bonjour,

    Mon problème n'est pas évident (en tout cas pour moi) :

    J'ai deux octets. Exemple
    Octet 1 : 1000 0000
    Octet 2 : 001X XXXX

    (Les X signifient que ces bits la ne me sont pas utiles)

    Il faudrait faire une manipulation à l'aide des opérateurs de type (>>,&,| ...) pour obtenir à la fin la chaine 100 0000 001 !

    J'avais pensé à ca moi mais sans succès visiblement ...

    ChaineFinal = octet[0] << 3;
    chianefinal= chainefinal | (octet[1] >>1 & 7 );

    Merci beaucoup ! et bon courage !

    -----

  2. #2
    Jack
    Modérateur

    Re : Programmation PIC opérateur

    Le problème, c'est que tu n'expliques pas comment tu veux construire la chaine finale à partir des 2 octets.

  3. #3
    antek

    Re : Programmation PIC opérateur

    Citation Envoyé par leoleoleo24 Voir le message
    J'ai deux octets. Exemple
    Octet 1 : 1000 0000
    Octet 2 : 001X XXXX
    pour obtenir à la fin la chaine 100 0000 001 !
    Il n'y a pas une erreur ?

  4. #4
    leoleoleo24

    Re : Programmation PIC opérateur

    ReBonjour,

    En effet il y a une erreur ! Il faut reconstruire la chaine finale 1000 0000 001 avec les deux octets. Désolé !

    Comment je veux construire la chaine final : avec des opérateur de type ET logic (&), OU logic (|), décalage à droite ou à gauche et d'autres si vous en avez en tête. J'espère ne pas avoir besoin de décalage circulaire sinon la solution est plus facile mais plus complexe pour le PIC...

    Merci pour vos retour. Bonne soirée !

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

    Re : Programmation PIC opérateur

    Citation Envoyé par leoleoleo24 Voir le message
    En effet il y a une erreur ! Il faut reconstruire la chaine finale 1000 0000 001 avec les deux octets. Désolé !

    Comment je veux construire la chaine final : avec des opérateur de type ET logic (&), OU logic (|), décalage à droite ou à gauche et d'autres si vous en avez en tête. J'espère ne pas avoir besoin de décalage circulaire sinon la solution est plus facile mais plus complexe pour le PIC...
    En assembleur c'est facile, 5 décalages à droite pour octet2.
    Et sans difficulté quel que soit le décalage.

  7. #6
    LeMulet

    Re : Programmation PIC opérateur

    Il faut "reconstruire" une chaine toto ou tata pour avoir la chaine titi.
    Dans ce cas il suffit de prendre la chaine titi.

    J'ai loupé quelque-chose ?
    Bonjour, et Merci.

  8. #7
    Jack
    Modérateur

    Re : Programmation PIC opérateur

    result = (octet1 << 3) | (octet2 >> 5);

  9. #8
    leoleoleo24

    Re : Programmation PIC opérateur

    Merci beaucoup pour vos retours ! Je ne sais pas si ca marche encore malheureusement, peut -etre pourriez vous m'aider :

    J'ai un buffer définie de la manière suivante:

    char inbuffer[BUF_SIZE]; // 64 byte input to USB device buffer

    Je sais que le premier byte(octect) de ce buffer est un byte qui correspond à l'octet 0 dont je vous parlais. Disons qu'il vaut "1111 1111"

    J'essaie d'allumer une LED lorsque l'octet 0 donc inbuffer[0] est égal à "1111 1111". Mais ca ne marche pas ... (mes leds fonctionnent)

    voila ce que j'ai fait, j'ai parcourru tout le tableau pour verifier que je me trompais pas de case mais rien à faire la led ne s'allume pas une seule fois et je ne pense pas me tromper d'index. Je pense que c'est ma syntaxe dans le if qui n'est pas bonne. inbuffer[i]==11111111


    for(i=0;i<64;i++){
    if(inbuffer[i]==11111111){
    LED_25PCT_ON();

    }
    else{
    LED_25PCT_OFF();
    }
    Delay10KTCYx(1000);
    }

  10. #9
    Jack
    Modérateur

    Re : Programmation PIC opérateur

    if(inbuffer[i]==11111111){
    Par quel miracle veux-tu que ton compilateur sache que le 11111111 est du binaire et pas du décimal?

    De toutes manières, le binaire n'est pas une base gérée en standard par le C/C++. Essaie avec de l'hexadécimal ou du décimal pour voir:
    if(inbuffer[i]==0xff) // hexadécimal
    if(inbuffer[i]==255) // décimal

  11. #10
    leoleoleo24

    Re : Programmation PIC opérateur

    Merci Jack ! J'ai mis 0b11111111 et ca fonctionne ! Mtn j'ai un nouveau problème ... que des problèmes ... Je veux avoir à la fin la chaine final 100 0000 0001 sachant que l'octect 0 est 1000 0000 et l'octect 1 001X XXXX. J'ai regardé sur internet 100 0000 001 vaut 1025. La LED ne s'allume pas non plus ...

    J'ai pourtant bien suivi vos conseils !

    unsigned short int ID=0; parce que il sera sur 11 bits

    ID = ((octect[0] << 3) | (octet[1] >> 5));

    if(ID == 1025){
    LED_25PCT_ON();
    }
    else{
    LED_25PCT_OFF();
    }
    }

  12. #11
    LeMulet

    Re : Programmation PIC opérateur

    Citation Envoyé par leoleoleo24
    J'ai regardé sur internet 100 0000 001 vaut 1025
    Déja, il faut arreter d'écrire cette chaine sous cette forme, pour la lisibilité (et la santé mentale de mon cerveau ).
    Un octet c'est 8 bits, qu'on peut, au pire grouper par 4 bits
    Sinon.... n'importe qui peut se tromper.

    Donc, la chaine est la suivante : 0010 0000 0001

    On peut alors, au lieu de "demander à internet", calculer sa valeur (ou au pire la taper sur la calculatrice de windows)

    Le calcul se fait de la manière suivante :
    Chaque bit a un "poids"
    Le premier bit vaut 1 (forcément, puisque c'est le seul moyen d'avoir un nombre impaire...)
    Le deuxième vaut le double du premier soit 2
    Le troisième vaut le double du deuxième soit 4
    Le quatrième vaut le double du troisième soit 8
    etc etc

    Donc le calcul de la chaine est le suivant :

    1x1 + 0x2 + 0x4 + 0x8 =>1
    0x16 + 0x32 + 0x64 + 0x128 =>0
    0x256 + 1x512 + 0x1024 + 0x2048 =>512

    Ce qui fait un total de 513
    Bonjour, et Merci.

  13. #12
    Jack
    Modérateur

    Re : Programmation PIC opérateur

    @LeMulet: en effet, 513 et pas 1025.

    @leoleoleo: puisque ton compilateur accepte la base binaire, pourquoi ne pas en profiter et simplement écrire if (ID == 0b1000000001) ?

  14. #13
    leoleoleo24

    Re : Programmation PIC opérateur

    Bonjour merci pour toutes vos réponses et votre précieuse aide.

    Je réponds à la question de Jack. Pourquoi je ne peux pas faire ID=0b100 0000 001

    Parce que je n'ai pas la chaine ID. La chaine ID est la chaine que je dois reconstruire à partir de l'octet 1 et l'octet 2.

    Ces deux octets m'arrivent sous le type char. Pour obtenir mon ID qui ne peut être sous un type char car il y a plus de 8 bits. je l'ai passé sous un type unsigned short int composé de 32 bits.

    Le problème est que je n'arrive pas à caster l'octet 1 : 1000 0000. Je fais (unsigned short int)octet1 et il ne me renvoit ni 0x8000 ni 0x0800.

    Si vous savez caster vous me seriez d'une grande aide. (Ainsi la solution proposé par Jack ne marche pas en sachant que je n'avais pas précisé le type, c'etait donc pas prévisible )

  15. #14
    leoleoleo24

    Re : Programmation PIC opérateur

    0x0080 pardon

  16. #15
    leoleoleo24

    Re : Programmation PIC opérateur

    et 16 bit pour le unsigned short int

  17. #16
    Bluedeep

    Re : Programmation PIC opérateur

    Si quelqu'un arrive à suivre ces explications parcellaires, qu'il m'explique.

    Merci.

  18. #17
    leoleoleo24

    Re : Programmation PIC opérateur

    Voici la solution :

    ID = (((unsigned short int)(octect[0]>>1)<<4) | ((unsigned short int)(octet[1]>>5))); Il y a un truc bizarre dans cette solution mais je n'ai pas reussi à l'enlever (decalage de 1 d'un coté puis 4 decalage de l'autre ...)

    Merci à vous tous

  19. #18
    Jack
    Modérateur

    Re : Programmation PIC opérateur

    Citation Envoyé par Bluedeep Voir le message
    Si quelqu'un arrive à suivre ces explications parcellaires, qu'il m'explique.

    Merci.
    Pas moi en tout cas.

    de quelle chaine parle-t-on? Il y a des chaines de caractères quelque part?

    decalage de 1 d'un coté puis 4 decalage de l'autre
    C'est bizarre en effet.
    Dernière modification par Jack ; 21/03/2017 à 18h58.

Discussions similaires

  1. quelle est la difference entre programmation procedurale et la programmation orientee objet
    Par invite430abc62 dans le forum Programmation et langages, Algorithmique
    Réponses: 9
    Dernier message: 27/01/2016, 13h34
  2. Opérateur transposé / Opérateur complexe conjugué
    Par invitebdd94213 dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 14/07/2009, 10h17
  3. Opérateur d'opérateur d'ensembles
    Par invite6b1a864b dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 10/10/2008, 19h37
  4. l'opérateur "d rond" est-il vraiment un opérateur ?
    Par princessleila dans le forum Mathématiques du supérieur
    Réponses: 13
    Dernier message: 31/10/2007, 13h41
  5. Opérateur différentiel et opérateur intégrale associé
    Par invite412f80f3 dans le forum Mathématiques du supérieur
    Réponses: 14
    Dernier message: 08/07/2006, 19h45