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

(PIC16F / C) Octet sur plus plusieurs sorties (ex: PORTA = 0b10000000)



  1. #1
    RichardNoirPlus

    (PIC16F / C) Octet sur plus plusieurs sorties (ex: PORTA = 0b10000000)


    ------

    Bonjour à tous, je bloque sur une question de syntaxe en C. Je n'arrive pas à trouver de réponse car je n'ai probablement pas les bons termes et ma question est précise.

    Il est facile de définir l'état des 8 bits d'un port instantanément en faisant par exemple PORTA = 0b10000000.

    Mais je souhaiterai "envoyer" l'état de mes 8 bits sur des sorties qui n'appartiennent pas au meme port. Comment faire ?

    Par exemple, comment faire en une seule commande:

    RA1 = 0;
    RB1 = 1;
    RB2 = 1;
    RC1 = 0;
    RC3 = 0;
    RD0 = 1;
    RD1 = 1;
    RD2 = 1;

    Je suppose qu'il faut faire une "définition" en début de programme mais je n'arrive pas à trouver la syntaxe... si quelqu'un pouvait m'aider, je le remercie d'avance !

    -----

  2. Publicité
  3. #2
    Blue Sn4ke

    Re : (PIC16F / C) Octet sur plus plusieurs sorties (ex: PORTA = 0b10000000)

    Bonjour,

    Ce n'est pas possible.
    Tu ne peux pas écrire simultanément dans plusieurs registres en une seule instruction.

    A+

  4. #3
    RichardNoirPlus

    Re : (PIC16F / C) Octet sur plus plusieurs sorties (ex: PORTA = 0b10000000)

    Merci pour ta réponse ! Donc je n'ai pas d'autre choix que de créer une fonction dédiée.

  5. #4
    RISC

    Re : (PIC16F / C) Octet sur plus plusieurs sorties (ex: PORTA = 0b10000000)

    Salut Richard,

    Voila un exemple comment faire cette "pirouette" pour un PIC24F :
    Code:
    //==============================================================================
    //  FUNCTION:     Display_LEDs(x)
    //  INPUT :       Hex Value to display
    //  RETURNS:      nothing
    //  REQUIREMENTS: none
    //==============================================================================
     void Display_LEDs(unsigned char x)
     {
         LATCbits.LATC6 =  (x & 0b10000000) >> 7;  // bit 7
         LATBbits.LATB12 = (x & 0b01000000) >> 6;  // bit 6
         LATAbits.LATA8 =  (x & 0b00100000) >> 5;  // bit 5
         LATAbits.LATA9 =  (x & 0b00010000) >> 4;  // bit 4
         LATBbits.LATB9 =  (x & 0b00001000) >> 3;  // bit 3
         LATBbits.LATB8 =  (x & 0b00000100) >> 2;  // bit 2
         LATAbits.LATA7 =  (x & 0b00000010) >> 1;  // bit 1
         LATAbits.LATA10 = (x & 0b00000001);      // bit 0
     }
    a+
    Dernière modification par RISC ; 30/10/2013 à 18h10.
    Ma marotte ? les microcontrôleurs ;=)

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    grosmatou75001

    Re : (PIC16F / C) Octet sur plus plusieurs sorties (ex: PORTA = 0b10000000)

    Attention: Avec un peu de gymnastique on peut très bien repartir les bit sur plusieurs ports comme le montre RISC, le point important c'est que cela ne se fera pas en une seule instruction, mais en plusieurs donc pas exactement au même moment pour tout les bit. Généralement on s'en fiche, on parle de µs de délai.

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/02/2013, 21h03
  2. Pull down portA ?
    Par naskar dans le forum Électronique
    Réponses: 3
    Dernier message: 19/11/2012, 15h08
  3. PortA sur PIC16F1825
    Par davidlm dans le forum Électronique
    Réponses: 2
    Dernier message: 01/09/2012, 11h53
  4. PORTA sur 16F877A
    Par flyingrock dans le forum Électronique
    Réponses: 8
    Dernier message: 01/03/2011, 20h23
  5. PORTA/B/C/D/E et LAT/A/B/C/D/E
    Par pikoasis dans le forum Électronique
    Réponses: 1
    Dernier message: 02/06/2010, 13h15
Découvrez nos comparatifs produits sur l'informatique et les technologies.