programmation de PIC 16F877 en C
Répondre à la discussion
Page 1 sur 3 12 DernièreDernière
Affichage des résultats 1 à 30 sur 79

programmation de PIC 16F877 en C



  1. #1
    invite1cd8f19a

    Question programmation de PIC 16F877 en C


    ------

    bonjour tout le monde
    j'ai un mini projet à réaliser a base de pic 16F877 et comme langage de programmation j'ai choisis le C, j'ai déjà édité 2 codes sources qui font la même fonction car d'après ma recherche j'ai trouve comme deux langage diffèrent ou bien ça dépend du logiciel utilisé pour la compilation???
    mais ni les deux ne veulent pas se compiler, j'utilise MPLAB avec CCX5.
    voila mes deux codes
    la fonction du programme est
    si une action sur un bouton poussoir (RB0/RB1/RB2/RB3) la led correspondant doit s'allumer (RA1/RA2/RA3/RA4 dans l'ordre) et rester allumer jusqu'a une autre action sur le même poussoir

    #include<p16F877.h>
    #byte PORTA=5
    #byte PORTB=6
    #use delay(clock=20000000)
    #bit inter1=PORTB0
    #bit inter2=PORTB1
    #bit inter3=PORTB2
    #bit inter4=PORTB3
    //#bit led1=PORTA1
    //#bit led2=PORTA2
    //#bit led3=PORTA3
    //#bit led4=PORTA4

    char a=0,b=0,c=0,d=0;
    unsigned tempo:16;


    void antirebond(void);


    void main(void)

    {
    SET_TRIS_A(0xE0);
    SET_TRIS_B(0xFF);

    for (;
    {
    if (inter1==1 && a==0) {antirebond(); while(inter1);OUTPUT_BIT(PIN_A 1,1) ;
    antirebond();a++;}
    else if(inter1==1 && a==1)
    {antirebond(); while(inter1);OUTPUT_BIT(PIN_A 1,0) ;
    antirebond();
    a=0;}
    if (inter2==1 && b==0) {antirebond(); while(inter2);OUTPUT_BIT(PIN_A 2,1) ;
    antirebond();
    b++;}
    else if (inter2=1 && b=1){antirebond(); while(inter2);OUTPUT_BIT(PIN_A 2,0) ;
    antirebond();
    b=0}
    if (inter3==1 && c==0) {antirebond(); while(inter3);OUTPUT_BIT(PIN_A 3,1) ;
    antirebond();
    c++;
    }
    else if (inter3==1 && c==1){antirebond(); while(inter3);OUTPUT_BIT(PIN_A 3,0) ;
    antirebond();c=0}

    if (inter4==1 && d==0) {antirebond(); while(inter4);OUTPUT_BIT(PIN_A 4,1) ;
    antirebond();d++;}
    else if (inter4==1 && d=1) {antirebond(); while(inter4);OUTPUT_BIT(PIN_A 4,0) ;
    antirebond();d=0}
    }
    return 0;}
    void antirebond(void)
    {
    for (tempo=0;tempo<2000;tempo++);
    }
    le 2eme code
    #include<p16F877.H>
    bit inter1 @RB0; //Bp1
    bit inter2 @RB1; //Bp2
    bit inter3 @RB2; //Bp3
    bit inter4 @RB3; //Bp4
    bit led1 @RA1; //Led1
    bit led2 @RA2; //Led2
    bit led3 @RA3; //Led3
    bit led4 @RA4; //Led4
    #use delay (clock=20000000)



    char a=0,b=0,c=0,d=0;
    void main(void)
    {

    TRISA=0b11100000;
    TRISB=0b11111111;
    for(;
    {

    if (inter1==1 && a==0) { led1=1;
    a++;}
    else if(inter1==1 && a==1)
    {led1=0;
    a=0;}
    if (inter2==1 && b==0) { led2=1
    b++;}
    else if (inter2=1 && b=1){led2=0;
    b=0}
    if (inter3==1 && c==0) { led3=1;
    c++;
    }
    else if (inter3==1 && c==1){led3=0;c=0}

    if (inter4==1 && d==0) { led4=1 ;d++;}
    else if (inter4==1 && d=1) {led4=0;d=0}
    }
    return 0;}
    si vous trouvez que je suis pas sur les bonnes voies je vous prie de me remettre sur la bonne route
    tous vos conseilles,remarques et explications seront les bienvenus et MERCI bonne journée pour tout le monde

    -----

  2. #2
    sdec25

    Re : programmation de PIC 16F877 en C

    Salut,
    Déjà, tu devrais mettre le code entre balises CODE et pas en citation.
    Ensuite, s'il y a une erreur de compilation et que tu ne donnes pas les erreurs obtenues tu n'obtiendras aucune aide.

    ou bien ça dépend du logiciel utilisé pour la compilation???
    Le langage varie un peu suivant le compilateur utilisé. En particulier les lignes commençant par #

  3. #3
    invite1cd8f19a

    Re : programmation de PIC 16F877 en C

    ok dsl pour l'erreur de quote

    Clean: Deleting intermediary and output files.
    Clean: Done.
    Executing: "C:\Program Files\Microchip\MPASM Suite\mplink.exe" /o "Test.HEX"
    MPLINK 4.35, Linker
    Copyright (c) 1998-2010 Microchip Technology Inc.
    Error - linker command file required.
    Errors : 1

    Link step failed.
    BUILD FAILED: Fri Mar 05 13:10:42 2010


    voila le message d'erreur
    pour les codes que j'ai deja mis est qu'il ya des fautes si oui est que vouvez m'expliquez ? et merci

  4. #4
    invite871681a3

    Re : programmation de PIC 16F877 en C

    Error - linker command file required.
    Vous devez configurer Mplab avec CC5x avant de créer votre Projet sur mplab.
    cliquez Projet, set language tool Location
    dans la fenêtre cherchez l'exécutable CC5X.exe et indiquez son emplacement avec Browse

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

    Re : programmation de PIC 16F877 en C

    j'ai deja fait les etapeson de creation de projet et j'ai declaré les repertoire ou se trouve le CCX5 ainsi que les autres fichier
    j'ai utilisé un tutorial qui se trouve sur
    http://www.electronique-facile.com/
    dans la partie programmation de pic en c

  7. #6
    sdec25

    Re : programmation de PIC 16F877 en C

    C'est tout ce qui est affiché ? Il n'y a pas de compilation ?
    Le linker est appelé sans fichier d'entrée, ça ne peut pas fonctionner.

  8. #7
    invite1cd8f19a

    Re : programmation de PIC 16F877 en C

    j'ai pas compris qu'est ce que vous voulez dire ??

    ok est ce que je peux avoir le squelette d'un programme en C pour CCX5 avec des explications car je me trouve perdu avec des difference langage pour porgrammer le pic en C

  9. #8
    sdec25

    Re : programmation de PIC 16F877 en C

    Ça ne vient pas de ton programme mais de la configuration du compilateur.
    Tu peux le vérifier en essayant de compiler un programme vide, ça ne fonctionnera pas.

  10. #9
    invite1cd8f19a

    Re : programmation de PIC 16F877 en C

    j'ai ajoute mon fichier dans le dossier source
    ca donne ca

    Clean: Deleting intermediary and output files.
    Clean: Done.
    Executing: "C:\Program Files\bknd\CC5X\CC5X.EXE" test.c -CC -fINHX8M -p16F877 -a -L -Q -V -FM
    CC5X Version 3.4C, Copyright (c) B Knudsen Data, Norway 1992-2010
    --> FREE edition, 8-16 bit int, 24 bit float, 32k code, reduced optim.
    test.c:

    #include<p16F877.h>
    ^------
    Error[1] C:\Users\Amine\Desktop\Mini Projet\Programme\Beta\test.c 1 : Unable to open file 'p16F877.h'
    (The file name or path can be wrong (Also consider option -cif))

    Error options: -ew: no warning details -ed: no error details -eL: list details
    BUILD FAILED: Fri Mar 05 22:48:58 2010

  11. #10
    invite1cd8f19a

    Re : programmation de PIC 16F877 en C

    si vous disposez d'une autre solution pour complier mon code sur d'autre application ca sera mieux ou me donner les etapes pour bien configurer MPLAP avec CCX5 pour l'ensemble de mon projet
    et merci

  12. #11
    sdec25

    Re : programmation de PIC 16F877 en C

    Où est ton fichier p16F877.h ?
    Dans les options de ton compilateur, qu'as-tu mis dans les répertoires d'include ?

  13. #12
    invite1cd8f19a

    Re : programmation de PIC 16F877 en C

    ok
    je pense ca sera mieux de m'expliquer un peu les etapes de configuration
    ca sera mieux que je la refasse que de chercher les erreur qui j'ai comis mors de la configuration

  14. #13
    invitea5e3e6e1

    Re : programmation de PIC 16F877 en C

    Bonjour
    Dans le source il y a quelques fautes:
    Le port A doit être déclaré en sortie numérique (en analogique au reset)
    Le port B doit être "tiré" a 1 (résistance de pull up) en entrée.
    Les boutons sont validés par un 0 sur la ligne correspondante.

    Connais pas le CC5x pour le 16F877 j'utilise
    DevPic87x
    (c) XWare 2003-2007
    Il est free.
    Cordialement

  15. #14
    invite7a49d0d5

    Cool Re : programmation de PIC 16F877 en C

    Citation Envoyé par bs.amine Voir le message
    ok
    je pense ca sera mieux de m'expliquer un peu les etapes de configuration
    ca sera mieux que je la refasse que de chercher les erreur qui j'ai comis mors de la configuration
    ok

    "MPLAB CCX5 configuration"
    ou
    "MPLAB CCX5 aide"

    dans google...

    vede
    ;O]

    ps : et yaurait pas de la doc avec ces compilos?
    on m'aurait menti....

  16. #15
    RISC

    Re : programmation de PIC 16F877 en C

    Salut,

    Pourquoi s'ennuyer avec des compilateurs shadocks alors que celui de Microchip est gratuit

    Le compilateur HiTech PRO mode lite fonctionne sans limitations de temps, de taille de code,.....

    Tous les compilateurs Microchip existent en versions gratuites (Lite) téléchargeables. Pourquoi s'ennuyer...

    a+

  17. #16
    invite1cd8f19a

    Re : programmation de PIC 16F877 en C

    Citation Envoyé par F1TVB Voir le message
    Bonjour
    Dans le source il y a quelques fautes:
    Le port A doit être déclaré en sortie numérique (en analogique au reset)
    Le port B doit être "tiré" a 1 (résistance de pull up) en entrée.
    Les boutons sont validés par un 0 sur la ligne correspondante.

    Connais pas le CC5x pour le 16F877 j'utilise
    DevPic87x
    (c) XWare 2003-2007
    Il est free.
    Cordialement
    pour les premiers remarques
    j'ai deja tout dans les schemas pull down plus bp vers VDD
    merci
    pour le compilateur je vais essayer le divPIC87X

  18. #17
    invite1cd8f19a

    Wink Re : programmation de PIC 16F877 en C

    Citation Envoyé par vede Voir le message
    ok

    "MPLAB CCX5 configuration"
    ou
    "MPLAB CCX5 aide"

    dans google...

    vede
    ;O]

    ps : et yaurait pas de la doc avec ces compilos?
    on m'aurait menti....
    pour le help le prob du compatibilité avec vista
    merci pour vos reponses

  19. #18
    invite871681a3

    Re : programmation de PIC 16F877 en C

    #include<p16F877.h>
    ^------
    Error[1] C:\Users\Amine\Desktop\Mini Projet\Programme\Beta\test.c 1 : Unable to open file 'p16F877.h'
    (The file name or path can be wrong (Also consider option -cif))
    C'est une erreur de declaration du fichier 16F877.h essai de compiler ca
    #pragma chip pic16f877
    bit inter1 @PORTB.0; //Bp1
    bit inter2 @PORTB.1; //Bp2
    bit inter3 @PORTB.2; //Bp3
    bit inter4 @PORTB.3; //Bp4
    bit led1 @PORTA.1; //Led1
    bit led2 @PORTA.2; //Led2
    bit led3 @PORTA.3; //Led3
    bit led4 @PORTA.4; //Led4

    char a,b,c,d;

    void main(void)
    {

    TRISA=0b11100000;
    TRISB=0b11111111;
    for(;
    {

    if (inter1==1 && a==0) { led1=1;
    a++;}
    else if(inter1==1 && a==1)
    {led1=0;
    a=0;}
    if (inter2==1 && b==0) { led2=1;
    b++;}
    else if (inter2==1 && b==1){led2=0;
    b=0;}
    if (inter3==1 && c==0) { led3=1;
    c++;
    }
    else if (inter3==1 && c==1){led3=0;c=0;}

    if (inter4==1 && d==0) { led4=1 ;d++;}
    else if (inter4==1 && d==1) {led4=0;d=0;}
    }
    return;}

    Tu ne devras pas avoir de message d'erreur.
    Ne te décourage pas, CC5X est un très bon compilateur il suffi de le maîtriser un peut et pour cela il n'y a pas mieux que l'edito (La programmation des Pic en C) sur le site electronique-facile

  20. #19
    invite1cd8f19a

    Re : programmation de PIC 16F877 en C

    Merci beaucoup jalavaj ton code c'est compilé sans erreurs
    j'ai passé toute la journée a essayer d'autre compilateur et malheureusement chaque comilateur utilise son propre syntaxe.J'ai reussi a compiler et simuler mon code avec devpic87X ca marche bien mais il utilise un syntaxe differents de CCX5
    je vais essayer le deux et je choisirai le simple a utilisé
    je ferai mes tests et je vous reinforme de mon avancement
    merci tout le monde pour votre attention
    A+

  21. #20
    invite1cd8f19a

    Re : programmation de PIC 16F877 en C

    de retour mais mnt pour mon code la compilation ca march nickel avec la simultaaion sur isis
    mais j'ai deux petits prob's

    1-je sais pas pourquoi ma led s'eteint quand le cycle en bas a cote de runnig (sur isis) se termine.
    2-le but de mon code est d'allumer la led par le botton poussoir correspondant et une autre action permet de l'eteindre .
    et je veux que je peux allumer plus qu'une led au meme temps d'apres la simulation que j'ai fais avec mon code, quand une led est allumée et j'appuis sur le botton pousoir d'une autre led :la 1 er s'eteind et l'autre s'allume (action par ke botton poussoir)
    moi je veux que les deux restent allumées
    voila le schema isis pour etre clair


    par exemple BP1 allume la led 2
    si j'apuis sur BP2 allume la led 3 et s"eteind la led 2
    moi je veux que les deux resteent allumer
    elles s'eteindront juste quand j'apuis a nouveau sur le bp correspondant

    dsl mon msg est un peu long mais juste pour expliquer mes prob's
    bonne nuuit

  22. #21
    invite1cd8f19a

    Re : programmation de PIC 16F877 en C

    bonjour pour le 1 er prob c'est reglé c'etait juste le chien de garde qui intialise les registre apres un certain moment
    pour le deuxieme je sais pas encore j'ai teste d'autre solution mais rien pour le moment

  23. #22
    invite7a49d0d5

    Cool Re : programmation de PIC 16F877 en C

    Citation Envoyé par bs.amine Voir le message
    (...)
    2-le but de mon code est d'allumer la led par le botton poussoir correspondant et une autre action permet de l'eteindre .
    et je veux que je peux allumer plus qu'une led au meme temps d'apres la simulation que j'ai fais avec mon code, quand une led est allumée et j'appuis sur le botton pousoir d'une autre led :la 1 er s'eteind et l'autre s'allume (action par ke botton poussoir)
    moi je veux que les deux restent allumées
    voila le schema isis pour etre clair


    par exemple BP1 allume la led 2
    si j'apuis sur BP2 allume la led 3 et s"eteind la led 2
    moi je veux que les deux resteent allumer
    elles s'eteindront juste quand j'apuis a nouveau sur le bp correspondant

    dsl mon msg est un peu long mais juste pour expliquer mes prob's
    bonne nuuit
    Bonsoir,

    moi, si j'ai bien compris, j'utiliserais une variable
    par led, pour "mémoriser" son état...

    exemple en pseudo code :

    Code:
    //variables
    etat_led1, etat_led2, etat_led3... as byte = 0
    
    //programme
    while true
    
     if BP1 = 1 
        etat_led1 = not(etat_led1) // inverse état
        led1 = etat_led1
     end if
    
     if BP2 = 1 
        etat_led2 = not(etat_led2) // inverse état
        led2 = etat_led2
     end if
    
     //pareil pour chaque bouton/led...
      
    ....
    ...
    ...
    wend
    il me semble que ce code ferait ce que tu désires...
    mais j'ai peut-être mal compris...

    vede
    ;O]

  24. #23
    invite1cd8f19a

    Re : programmation de PIC 16F877 en C

    merci verde pour le code je vais le tester mais avec quel langage il est ??

    pour l'explication:
    une action sur un BP1>>>led 1 on
    une autre action sur BP1>>>led 1 off
    ca deja fait
    le prob est
    une action sur BP1>>>led 1 on
    une action sur BP2>>>led 2 on
    les deux allumer au meme temps ce qui se passe avec mon code
    et que dés que j'appui sur l'un du botton poussoir il allume la led correnspondante et eteind la led qui etait allumé

    le code que j'ai deja ecrit est sur la 1er page ok

  25. #24
    invite7a49d0d5

    Cool Re : programmation de PIC 16F877 en C

    re ;O]

    mon exemple est en "aucun langage"...
    c'est une base "logique" ...
    à "traduire" dans le tien (ASM, C, Basic...)...

    bon après je suis pas sur de comprendre...
    dans :
    le prob est
    une action sur BP1>>>led 1 on
    une action sur BP2>>>led 2 on
    les deux allumer au meme temps ce qui se passe avec mon code
    et que dés que j'appui sur l'un du botton poussoir il allume la led correnspondante et eteind la led qui etait allumé
    une action sur BP2 doit allumer LED2 (si éteinte...)...
    ça d'accord...
    mais cette même action sur BP2 doit aussi éteindre
    toutes les leds allumées autres que LED2?
    c'est bien ça?

    idéalement, avant de coder, il faudrait dessiner un
    logigramme ou organigramme... et ça permettrait
    de mieux comprendre le comportement désiré...
    et mieux détecter des erreurs de "logique"...
    et d'optimiser le tout... avant codage en C...

  26. #25
    invite1cd8f19a

    Re : programmation de PIC 16F877 en C

    ok
    je fais t'expliquer simplement
    BP1>>> etat inverse led1
    BP2>>> etat inverse led2

    je veux que les leds soit indepandante car mon code fait
    si on suppose que led1 allumée si j'appuis sur BP2 il allume la led2 et etiend la led1 normalement je dois avoir les deux allumée c'est ca mon but

    led 1 resetent indepandant de la led 2

  27. #26
    invite7a49d0d5

    Cool Re : programmation de PIC 16F877 en C

    ok, donc mon exemple de "code" fait exactement ça..
    chaque led est "gérée" indépendamment des autres...
    grâce à son BP...

  28. #27
    invite1cd8f19a

    Re : programmation de PIC 16F877 en C

    ok je te donne une partie de mon code
    Code:
    while(1)
    {
    
    if (inter1==1 && a==0) {antirebond();
    led1=1;while(inter1); 
    antirebond();
    a++;}
    else if(inter1==1 && a==1)
    {antirebond();
    led1=0;while(inter1);
    antirebond();
    a=0;}
    if (inter2==1 && b==0) {antirebond();while(inter2); led2=1;
    antirebond();b++;}
    else if (inter2==1 && b==1){antirebond();while(inter2);led2=0;
    antirebond();
    b=0;}
    le probleme et que les "If" sont indexes dans la même boucle
    donc si un bp est actionne il reflete sur les autres

  29. #28
    invite7a49d0d5

    Cool Re : programmation de PIC 16F877 en C

    oui, donc il faut les "séparer" comme dans mon exemple...

    while true
    {

    if BP1
    {
    ......
    }

    if BP2
    {
    ......
    }

    }
    ps : et en fait pas besoin de variables "états", il suffit simplement
    d'inverser l'état du port directement (LED1 = not LED1)

  30. #29
    invite7a49d0d5

    Cool Re : programmation de PIC 16F877 en C

    re ;O]

    et plus besoin des variables a,b,c et d...

    ça donne (basé sur le code de jalavaj)

    Code:
    #pragma chip pic16f877
    bit inter1 @PORTB.0; //Bp1
    bit inter2 @PORTB.1; //Bp2
    bit inter3 @PORTB.2; //Bp3
    bit inter4 @PORTB.3; //Bp4
    bit led1 @PORTA.1; //Led1
    bit led2 @PORTA.2; //Led2
    bit led3 @PORTA.3; //Led3
    bit led4 @PORTA.4; //Led4
    
    void main(void)
    {
    
    TRISA=0b11100000;
    TRISB=0b11111111;
    
    while(1)
    {
    
    if (inter1==1) 
    {
     led1=not(led1);
    }
    
    if (inter2==1) 
    {
     led2=not(led2);
    }
    
    if (inter3==1) 
    {
     led3=not(led3); 
    }
    
    if (inter4==1) 
    {
     led4=not(led4);
    }
    
    }
    }
    bon après je connais pas la syntaxe de ton langage...
    notamment le not(led)... je sais pas comment ça
    s'écrit dans ton langage...

  31. #30
    invite1cd8f19a

    Re : programmation de PIC 16F877 en C

    lool on a pense dans le meme sens je voulais juste le poster et tu l'a mis en avance que moi
    je vais le tester ok et je vous informerez

Page 1 sur 3 12 DernièreDernière

Discussions similaires

  1. Pic 16f877 problème de programmation
    Par invite4bffdc16 dans le forum Électronique
    Réponses: 11
    Dernier message: 06/08/2009, 08h21
  2. Problème de programmation PIC 16F877, SAA 1064 et afficheurs 7 segments
    Par invite64e12149 dans le forum Électronique
    Réponses: 6
    Dernier message: 18/05/2009, 09h33
  3. Pb programmation PIC 16F877 et CNA
    Par invite31759d82 dans le forum Électronique
    Réponses: 6
    Dernier message: 26/02/2008, 19h00
  4. Réponses: 0
    Dernier message: 18/03/2007, 15h43
  5. programmation en C pic 16F877
    Par inviteb5e29967 dans le forum Électronique
    Réponses: 2
    Dernier message: 08/03/2007, 19h51
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...