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

Problème compilation 16F877A



  1. #1
    mc deluxe

    Problème compilation 16F877A


    ------

    Bonjour,
    le programme ci-dessous est destiné à un 16f877 et moi, je possède un 16f877a. Pouvez m'aidez à le modifier pour qu'il puisse fonctionner sur mon 16f877a?
    Merci d'avance pour votre aide, car tout seul, je n'y parvient pas
    Voici le programme en question:
    Code:
    #include <p16F877A.inc>
    //Cible PIC16F877a, bits de configuration
    __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
    //Configuration de la fréquence d'horloge, ici 20Mhz
    #pragma CLOCK_FREQ 20000000
    void main( void )
    {
    //Initialisation port A
    porta = 0x00;
    //Initialisation port B
    portb = 0x00;
    //Initialisation port C
    portc = 0x00;
    //Initialisation port D
    portd = 0x00;
    //Initialisation port E
    porte = 0x00;
    //Configuration port A
    trisa = 0x00;
    //Configuration port B
    trisb = 0x00;
    //Configuration port C
    trisc = 0x00;
    //Configuration port D
    trisd = 0x00;
    //Configuration port E
    trise = 0x00;
    //Configuration A/D pins
    adcon1 = 0x06;
    //désactivation du mécanisme de gestion des interruptions
    clear_bit( intcon, GIE );
    //Validation des résistances de pull-ups du port B
    clear_bit( option_reg, NOT_RBPU );
    //Boucle sans fin
    while( 1 )
    {
    portd = 0b00000001;
    delay_ms(100);
    portd = 0b00000011;
    delay_ms(10);
    portd = 0b00000010;
    delay_ms(100);
    portd = 0b00000110;
    delay_ms(10);
    portd = 0b00000100;
    delay_ms(100);
    portd = 0b00001100;
    delay_ms(10);
    portd = 0b00001000;
    delay_ms(100);
    portd = 0b00011000;
    delay_ms(10);
    portd = 0b00010000;
    delay_ms(100);
    portd = 0b00110000;
    delay_ms(10);
    portd = 0b00100000;
    delay_ms(100);
    portd = 0b01100000;
    delay_ms(10);
    portd = 0b01000000;
    delay_ms(100);
    portd = 0b11000000;
    delay_ms(10);
    portd = 0b10000000;
    delay_ms(100);
    portd = 0b11000000;
    delay_ms(10);
    portd = 0b01000000;
    delay_ms(100);
    portd = 0b01100000;
    delay_ms(10);
    portd = 0b00100000;
    delay_ms(100);
    portd = 0b00110000;
    delay_ms(10);
    portd = 0b00010000;
    delay_ms(100);
    portd = 0b00011000;
    delay_ms(10);
    portd = 0b00001000;
    delay_ms(100);
    portd = 0b00001100;
    delay_ms(10);
    portd = 0b00000100;
    delay_ms(100);
    portd = 0b00000110;
    delay_ms(10);
    portd = 0b00000010;
    delay_ms(100);
    portd = 0b00000011;
    delay_ms(10);
    }
    }

    -----
    Dernière modification par HULK28 ; 02/08/2009 à 02h53. Motif: Ajout des balises CODE pour la lisibilité

  2. Publicité
  3. 📣 Nouveau projet éditorial de Futura
    🔥🧠 Le Mag Futura est lancé, découvrez notre 1er magazine papier

    Une belle revue de plus de 200 pages et 4 dossiers scientifiques pour tout comprendre à la science qui fera le futur. Nous avons besoin de vous 🙏 pour nous aider à le lancer...

    👉 Je découvre le projet

    Quatre questions à explorer en 2022 :
    → Quels mystères nous cache encore la Lune 🌙 ?
    → Pourra-t-on bientôt tout guérir grâce aux gènes 👩‍⚕️?
    → Comment nourrir le monde sans le détruire 🌍 ?
    → L’intelligence artificielle peut-elle devenir vraiment intelligente 🤖 ?
  4. #2
    mc deluxe

    Re : Problème compilation 16F877A

    En plus de votre aide, je cherche un moyen pour rédiger à tous les coups mes directives, quelque soit le PIC !! car pour ce qui est du programme, je me débrouille.

  5. #3
    invite03481543

    Re : Problème compilation 16F877A

    Bonsoir,

    quel compilateur?
    quel problème au juste?

    Plusieurs remarques d'ordre général:

    RBPU n'a pas lieu d'être activé puique le portB est dirigé en sortie.
    Si seul le portD est utilisé pourquoi configurer les autres ports?
    Pourquoi désactiver GIE? -> il l'est automatiquement au reset.

    Si vous commandez des leds comment les avez-vous raccordé?

  6. #4
    mortaurat

    Re : Problème compilation 16F877A

    Si ton programme marche une seule modification.
    Code:
    #include <p16F877.inc>
    //Cible PIC16F877a, bits de configuration
    __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
    //Configuration de la fréquence d'horloge, ici 20Mhz
    #pragma CLOCK_FREQ 20000000
    void main( void )
    {
    //Initialisation port A
    porta = 0x00;
    //Initialisation port B
    portb = 0x00;
    //Initialisation port C
    portc = 0x00;
    //Initialisation port D
    portd = 0x00;
    //Initialisation port E
    porte = 0x00;
    //Configuration port A
    trisa = 0x00;
    //Configuration port B
    trisb = 0x00;
    //Configuration port C
    trisc = 0x00;
    //Configuration port D
    trisd = 0x00;
    //Configuration port E
    trise = 0x00;
    //Configuration A/D pins
    adcon1 = 0x06;
    //désactivation du mécanisme de gestion des interruptions
    clear_bit( intcon, GIE );
    //Validation des résistances de pull-ups du port B
    clear_bit( option_reg, NOT_RBPU );
    //Boucle sans fin
    while( 1 )
    {
    portd = 0b00000001;
    delay_ms(100);
    portd = 0b00000011;
    delay_ms(10);
    portd = 0b00000010;
    delay_ms(100);
    portd = 0b00000110;
    delay_ms(10);
    portd = 0b00000100;
    delay_ms(100);
    portd = 0b00001100;
    delay_ms(10);
    portd = 0b00001000;
    delay_ms(100);
    portd = 0b00011000;
    delay_ms(10);
    portd = 0b00010000;
    delay_ms(100);
    portd = 0b00110000;
    delay_ms(10);
    portd = 0b00100000;
    delay_ms(100);
    portd = 0b01100000;
    delay_ms(10);
    portd = 0b01000000;
    delay_ms(100);
    portd = 0b11000000;
    delay_ms(10);
    portd = 0b10000000;
    delay_ms(100);
    portd = 0b11000000;
    delay_ms(10);
    portd = 0b01000000;
    delay_ms(100);
    portd = 0b01100000;
    delay_ms(10);
    portd = 0b00100000;
    delay_ms(100);
    portd = 0b00110000;
    delay_ms(10);
    portd = 0b00010000;
    delay_ms(100);
    portd = 0b00011000;
    delay_ms(10);
    portd = 0b00001000;
    delay_ms(100);
    portd = 0b00001100;
    delay_ms(10);
    portd = 0b00000100;
    delay_ms(100);
    portd = 0b00000110;
    delay_ms(10);
    portd = 0b00000010;
    delay_ms(100);
    portd = 0b00000011;
    delay_ms(10);
    }
    }
    C'est ca l'avantage du C....
    Et dire que y'en à encore qui s'obstinent à l'assembleur

  7. A voir en vidéo sur Futura
  8. #5
    invite03481543

    Re : Problème compilation 16F877A

    Citation Envoyé par mc deluxe Voir le message
    Bonjour,
    le programme ci-dessous est destiné à un 16f877 et moi, je possède un 16f877a. Pouvez m'aidez à le modifier pour qu'il puisse fonctionner sur mon 16f877a?
    [/CODE]
    Si tu remplaces le #include <p16F877A.inc> par #include <p16F877.inc>, il ne fonctionnera plus pour le PIC16F877A, le programmateur ne reconnaitra pas la cible.
    A+

  9. #6
    mc deluxe

    Re : Problème compilation 16F877A

    le problème c'est que moi j'utilise un 16f876A, et ça change tout, le problème c'est que je ne sais modifier les directives pour le faire fonctionner sur un 16f876A, car à la base ce programme est pour un 16f877.
    Même en remplaceant #include <p16F877.inc> par #include <p16F877A.inc>, ça ne marche pas.
    J'utilise sourceboost pour compiler,
    chaque led est raccordé à un port D du pic. Il y a 8 leds.

  10. Publicité
  11. #7
    mortaurat

    Re : Problème compilation 16F877A

    Citation Envoyé par mc deluxe Voir le message
    le problème c'est que moi j'utilise un 16f876A, et ça change tout, le problème c'est que je ne sais modifier les directives pour le faire fonctionner sur un 16f876A, car à la base ce programme est pour un 16f877.
    Même en remplaceant #include <p16F877.inc> par #include <p16F877A.inc>, ça ne marche pas.
    J'utilise sourceboost pour compiler,
    chaque led est raccordé à un port D du pic. Il y a 8 leds.
    Dans le debut de ton topic tu avais dit que tu avais un 16f877 =).
    Pour le 16f876A, tu n'a pas de port D, donc tu dois utiliser le C, le B, ou le A.
    remplace donc tout les "portd" par "porta", "portb" ou "portc". et utilise la bonne librairy en entete. Ca devrait être un truc du genre #include <16f876A.inc>

    Code:
    Si tu remplaces le #include <p16F877A.inc> par #include <p16F877.inc>, il ne fonctionnera plus pour le PIC16F877A, le programmateur ne reconnaitra pas la cible.
    A+
    et alors ? on veut qu'il fonctionne pour un 16f877 qui c'est transformé en 16f876A =).

  12. #8
    invite03481543

    Re : Problème compilation 16F877A

    Citation Envoyé par mc deluxe Voir le message
    Bonjour,
    le programme ci-dessous est destiné à un 16f877 et moi, je possède un 16f877a. Pouvez m'aidez à le modifier pour qu'il puisse fonctionner sur mon 16f877a?
    C'est assez clair maintenant?
    Il dit qu'il possède un 16F877A et toi tu lui dis de mettre <p16f877.inc>.

    Maintenant on découvre que c'est un 16F876A...

    D'un coté il y en a un qui ne sait pas lire et l'autre qui ne sait pas exprimer son besoin...

  13. #9
    mc deluxe

    Re : Problème compilation 16F877A

    désolé, c'est un 16f877a que j'ai. A force d'utiliser un 16f876a je m'y perds .

  14. #10
    invite03481543

    Re : Problème compilation 16F877A

    Donc mon post#3 est toujours d'actualité.

  15. #11
    sdec25

    Re : Problème compilation 16F877A

    Bonjour,
    Pour avoir des directives de CONFIG pour plusieurs PIC il faudrait déjà avoir une constante qui permette de connaître le PIC.
    Il n'y a pas une ligne de ce genre :
    Code:
    #define DEVICE 16f877a
    ?
    Si oui, on peut différencier les cas :
    Code:
    #if DEVICE == 16f877a
    #pragma toto = ...
    #elif DEVICE == 16f877
    #pragma toto = ...
    #else
    #error pas le bon PIC
    #endif
    Et pour connaître les directives à mettre il y a plusieurs solutions :
    • lire la datasheet section CONFIG et rechercher dans le .h l'équivalent
    • configurer avec MPLAB
    • Chercher une doc qui liste toutes les directives de config pour tous les PICs (existe pour les 18f avec C18)
    Dernière modification par sdec25 ; 02/08/2009 à 12h44.

  16. #12
    mc deluxe

    Re : Problème compilation 16F877A

    Merci à tous,j 'ai trouvé ce qu'il fallait dans la datasheet. Par contre avec MPLAB, lorsque j'utilise un 16F84a, je peux remplacer par exemple PORTB=0b00000001 par RB1, alors qu'avec un 16F877a, le compilateur m'indique que RB1 n'est pas défini. Comme ça se fait?
    Merci pour vos réponses

  17. Publicité
  18. #13
    sdec25

    Re : Problème compilation 16F877A

    Citation Envoyé par mc deluxe Voir le message
    lorsque j'utilise un 16F84a, je peux remplacer par exemple PORTB=0b00000001 par RB1, alors qu'avec un 16F877a, le compilateur m'indique que RB1 n'est pas défini. Comme ça se fait?
    Parce que RB1 n'est pas défini dans le .h
    Si tu le veux il faut regarder dans le .h du 16f84a

    Sinon il y a d'autres moyens d'accéder à un bit, par exemple en utilisant des struct :
    Code:
    PORTBbits.RB1
    mais il faudra les définir.

  19. #14
    mc deluxe

    Re : Problème compilation 16F877A

    Ca y est ça fonctionne, merci à tous. Par contre, nouveau problème, Lorsque j'utilise un 16F84A, MPLAB accepte d'utiliser la notation par exemple RB1, par contre avec un 16F876A, il me dit que RB1 est indéfini, je dois passer par PORTB=0b00000001
    Une solution?
    Merci pour votre aide

  20. #15
    mc deluxe

    Re : Problème compilation 16F877A

    désolé j'ai posté deux fois

  21. #16
    mc deluxe

    Re : Problème compilation 16F877A

    Une dernière chose, lorsque je souhaite réaliser des temporisations avec la fonction delay, on me dit que j'ai dupliqué la fonction main. Y a-t-il une solution? Je pourrais utiliser le TIMER0 sur un 16F84A mais c'est juste pour un petit programme.

  22. #17
    sdec25

    Re : Problème compilation 16F877A

    Citation Envoyé par mc deluxe Voir le message
    Une dernière chose, lorsque je souhaite réaliser des temporisations avec la fonction delay, on me dit que j'ai dupliqué la fonction main.
    La fonction main est définie 2 fois.
    Sans voir ton code et l'erreur on ne peut pas deviner où.

  23. #18
    mc deluxe

    Re : Problème compilation 16F877A

    Voici mon programme, je cherche à faire clignoter deux leds c'est tout
    Code PHP:
    void main(void )
    {

    PORTB 0x00;
    TRISB 0x00;

    while(
    1
    {
    PORTB=0b00000001;
    delay_ms(100);
    PORTB=0b00000011.
    delay_ms(10)
    }


  24. Publicité
  25. #19
    sdec25

    Re : Problème compilation 16F877A

    Tu n'as pas d'include ? Poste le programme complet.
    Et quelle est l'erreur de compilation ?
    Poste tout le résultat de la compilation.
    Dernière modification par sdec25 ; 03/08/2009 à 15h44.

Discussions similaires

  1. probleme avec la voie RB3 du 16F877A ...
    Par nordiste dans le forum Électronique
    Réponses: 3
    Dernier message: 27/06/2011, 21h22
  2. Problème PortC avec I2C sur 16F877A
    Par flyingrock dans le forum Électronique
    Réponses: 2
    Dernier message: 26/04/2009, 22h54
  3. Problème de compilation
    Par mecanica dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 15/09/2008, 04h07
  4. [PICC18] Problème compilation
    Par jorg1n dans le forum Électronique
    Réponses: 0
    Dernier message: 16/05/2008, 13h44
  5. PIC 16F877A : Problème MPLab/Tmr2
    Par El Mariachi dans le forum Électronique
    Réponses: 4
    Dernier message: 19/04/2007, 16h19
Découvrez nos comparatifs produits sur l'informatique et les technologies.