programer un PIC 16F876
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

programer un PIC 16F876



  1. #1
    Bernibernouille

    programer un PIC 16F876


    ------

    Voilà je me suis mi a la programmation des PIC 16F876 et j'ai un probleme dans le début du programme
    Voilà ce que j'écrit:

    Code:
    #define led1 RB0
    
    void main(void)
    {
    	TRISA = 0b11111111;
    	TRISB = 0b00000000;
    	TRISC = 0b00000000;
    
    	PORTB=0;
    	PORTC=0;
    
    	for (;;)  {
    
    		led1 = RA0;  }
    	
    }
    Quand je compile, il me dit cette erreur:

    CC5X Version 3.3A, Copyright (c) B Knudsen Data, Norway 1992-2007
    --> FREE edition, 8-16 bit int, 24 bit float, 1k code, reduced optim.
    minuterie.c:


    led1 = RA0; }
    ^------
    Error[1] C:\Users\Bernard\Documents\pro gramation PIC en c\programes\minuterie\minuteri e.c 14 : Symbol 'RB0' is undefined
    (The definition of the symbol in not known. This can be due to
    wrong spelling or letter case mismatch. Otherwise a new symbol
    definition is required: variable, function, macro, etc.)

    Error options: -ew: no warning details -ed: no error details -eL: list details



    Je ne vois pas comment régler ce problème!!!

    si qqun peu m'aider

    Merci

    -----

  2. #2
    Gérard

    Re : programer un PIC 16F876

    Bonjour,
    Il ne reconnait pas le symbole que tu utilises : il faut déclarer les déclarer, voir doc du compilateur.

    La port A est en entrée analogique à la mise sous tension, tu dois écrire :
    ADCON1 = 7 pour que tout le port A soit en numérique.

  3. #3
    cherwam07

    Re : programer un PIC 16F876

    Tu voulais surement écrire :
    PORTA.0 = 1; pour allumer ta LED.

    Ou même mieux, comme tu avais commencé a le faire :

    #define led PORTA.0
    ...
    ...
    led = 1;

  4. #4
    mictour

    Re : programer un PIC 16F876

    Bonjour Bernibernouille,

    Regarde dans les fichiers 16F84.h et 16F876.h et tu verras que les symboles RA0, RA1 ... ont disparus ! (si tu y tiens, tu peux les rajouter).
    Donc : led1 = PORTA.0;

    La port A est en entrée analogique à la mise sous tension, tu dois écrire :
    ADCON1 = 7 pour que tout le port A soit en numérique.


    Bonne prog, mictour.

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

    Re : programer un PIC 16F876

    ok merci
    donc je doit metre :
    Code:
    #define led1 PORTB.0
    void main(void)
    {	
    	TRISA = 0b11111111;
    	TRISB = 0b11111111;
    	TRISC = 0b00000000;
    
    	PORTB=0;
    	PORTC=0;
    
    	for (;;)  {
    	
    	led1 = 1;
    
    }
    	
    }
    Mais j'ai pas bien compris pour ADCON1 = 7 ?
    qqun peut m'expliquer svp


    Merci

  7. #6
    mictour

    Re : programer un PIC 16F876

    Bonjour Bernibernouille,

    Regarde dans la "doc" microchip PIC16F87X, chapitre : 3.0 I/O PORTS,
    tu y trouveras tout ce dont tu as besoin. (Relis aussi le message de GERARD.)

    Quelques commentaires ...

    #define led1 PORTB.0 // Une led branchée sur PORTB.0 : suppose cette patte en sortie !

    void main(void)
    {
    ADCON1 = 7 // ou = 6
    // passe donc la PORTA en numerique.

    TRISA = 0b11111111;
    TRISB = 0b11111111; // Ici : 0b.11111110
    TRISC = 0b00000000;

    PORTB=0;
    PORTC=0;

    for (; {

    led1 = 1; // led1 = PORTA.0; si tu as un bouton sur PORTA.0, la led suivra...si tout va bien!

    }

    }

    Connais-tu ce lien : http://hhollard.club.fr/prog_pic_c.htm ?

    Bonne lecture, mictour.

  8. #7
    Bernibernouille

    Re : programer un PIC 16F876

    Merci mictour sa fonctionne
    oui je connait ce site. j'ai lu les tutos. c'est grâce a ce site que j'ai commencer.

    Par contre maintenant j'ai un autre problème!
    Le but de mon programme c'est de faire une minuterie et voilà ou j'en suis:
    Code:
    #define RB1 PORTB.1
    #define RB0 PORTB.0
    #define plus PORTA.0
    #define int1 PORTA.1
    char comptage;
    bit verif;
    void main(void)
    {	
    ADCON1 = 7;
    	TRISA = 0b11111111;
    	TRISB = 0b00000000;
    	TRISC = 0b00000000;
    
    PORTB = 0;
    PORTC = 0;
    comptage = 0;
    verif = 0;
    
    for (;;)  
    {
    if (plus ==1) 
    { 
    verif =1;
    }
    if (verif ==1 && plus == 0)
    {
    comptage++;
    verif = 0;
    }
    if (comptage < 3) 
    { 
    RB0 = 1; RB1=0; 
    }
    if (comptage >=3) 
    {
     RB1 = 1; RB0 = 0; 
    }
    if (comptage > 3)
     { 
    comptage = 3; 
    }
    if (int1 == 1) 
    { 
    comptage =0; 
    }
    }
    	
    }
    Le debugger ne m'indique pas de problème mais quand j'utilise le programme avec mon pic, il y a rien qui ce passe sauf RB0 (PORTB.0) qui est allumé. alors je me demandais si les variable "verif" et "comptage" étaient bonnes. Je ne pense pas qu'elle prennent la valeur demander?

    Merci

  9. #8
    cherwam07

    Re : programer un PIC 16F876

    Déclarer un bit, c'est pas beau. La traduction dépend du compilateur, et de toute facon c'est pas du C, donc déclare le en char.
    Ensuite, ca ne résoudra pas ce problème, mais il faut t'habituer à indenter ton code, c'est à dire mettre des tabulations bien placées pour rendre le truc lisible.
    Ne pas hésiter aussi à commenter

    Ca donnerai donc : (copie colle ce code et teste le : )

    Code:
    #define RB1 PORTB.1
    #define RB0 PORTB.0
    #define plus PORTA.0
    #define int1 PORTA.1
    
    char comptage;
    char verif;
    
    void main(void)
    {	
        ADCON1 = 7;
        TRISA = 0xFF;    // PORTA en entrée
        TRISB = 0;         // PORTB en sortie
        TRISC = 0;         // PORTC en sortie 
    
        PORTB = 0;
        PORTC = 0;
        comptage = 0;
        verif = 0;
    
        while(1)  
        {
            if (plus == 1)          // Si le BP plus en enfoncé
            { 
              verif =1;             // On démarre la minuterie
            }
          
            if ((verif == 1) && (plus == 0))
            {
              comptage++;
              verif = 0;
            }
          
            if (comptage < 3)     
            { 
              RB0 = 1;              // Allumer RB0, eteindre RB1
              RB1=0;       
            }
            if (comptage >=3) 
            {
              RB0 = 0;              // Eteindre RB0, allumer RB1
              RB1 = 1;  
            }
          
            if (comptage > 3)
            { 
              comptage = 3; 
            }
          
            if (int1 == 1) 
            { 
              comptage =0; 
            }
        }
    	
    }
    Bon courage

  10. #9
    Bernibernouille

    Re : programer un PIC 16F876

    Merci cherwam07 j'y penserai
    Pour le code il est juste c'est moi qui ai mal interpreter
    pour le moment ya plus de problemme donc merci à tous

Discussions similaires

  1. Différence entre PIC 16F876 et PIC 16F876A
    Par KHEOPS1982 dans le forum Électronique
    Réponses: 2
    Dernier message: 09/03/2008, 14h32
  2. "pic" dur a programer ou je suis juste bête
    Par NEOROBOT dans le forum Électronique
    Réponses: 6
    Dernier message: 15/02/2008, 13h06
  3. pic 16f876
    Par invite6568e6cf dans le forum Électronique
    Réponses: 2
    Dernier message: 21/05/2006, 18h19
  4. Pic 16f876
    Par Toufinet dans le forum Électronique
    Réponses: 2
    Dernier message: 22/04/2006, 13h49
  5. pic 16f876 et overclocking
    Par inviteeda80a3d dans le forum Électronique
    Réponses: 2
    Dernier message: 14/07/2003, 01h04
Découvrez nos comparatifs produits sur l'informatique et les technologies.