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

Quand s'executent les interruptions d'un PIC 16F877???



  1. #1
    snorky7

    Question Quand s'executent les interruptions d'un PIC 16F877???


    ------

    Salut!!!

    J'ai bientot un partiel sur la programmation des microcontroleurs 16F877 en langage C et je ne comprends pas quand s'executent les interruptions?
    Cela se passe-t-il quand le TIMER 0 passe de FF à 00?
    Et comment fait-on apparaitre l'interruption dans le programme principal?
    Merci de répondre à mes questions!

    -----

  2. Publicité
  3. #2
    invite03481543

    Re : Quand s'executent les interruptions d'un PIC 16F877???

    Salut Snorky7,

    Ah!! les interruptions des PIC...

    Bon pour essayer de faire simple, les interruptions sont gérés par les registres PIR et INTCON.

    La prise en compte de chaque bit d'indication d'interruption est obtenue si le bit d'autorisation correspondant est validée.
    Ex: Pour que TMR1IF (Interrupt Flag de débordement du timer1) soit pris en compte, il faut au préalable que TMR1IE (Interrupt Enable du timer1) soit mis à 1.

    Donc une interruption est activée par le biais d'une porte ET prenant en compte ces 2 conditions.

    Il est vrai que de nombreuses interruptions sont disponibles dans les PIC, mais cette "richesse" perd en qualité quand on sait que l'on ne dispose que d'un seul vecteur d'interruption.
    Donc il faut ramer un peu pour savoir quel est l'organe interrupteur.
    Ce qui sous entend des tests multiple pour appréhender le coupable.
    Le bit GIE (Global Interrupt Enable) est mis à 0 pour interdire toute prise en compte d'une nouvelle interruption, il sera mis de nouveau à 1 dès le retour de fin d'interruption RETFIE.
    Ainsi rien n'est prévu pour mettre automatiquement à 0 les bits d'indication d'interruption individuelle...
    C'est donc le programmeur qui doit se farcir le travail.

    Il faut aussi préciser que lors d'une interruption, seul le registre PC (Program Counter) est sauvegardé dans la pile, si tu veux sauvegarder d'autres registres, et ben faut le faire.... toi même (sic!)

    Tu as mis le doigt sur une des faiblesses des PIC...

  4. #3
    snorky7

    Re : Quand s'executent les interruptions d'un PIC 16F877???

    Ok merci mais le problème que j'ai est le suivant:
    Et comment sait-on quand exactement s'effectue ces interruptions? A quel endroit du programme exactement ? au niveau du programme principal?
    J'ai reussi a configurer les interruption mais c'est dans la programmation meme que j'ai un probleme.
    Je peux mettre le sujet (un jouet télécommandé pour enfant) et que j'ai fait si ca peut aider pour repondre a la question..

  5. #4
    invite03481543

    Re : Quand s'executent les interruptions d'un PIC 16F877???

    En pratique dans ton programme, tu crées une routine appelée par exemple init_pic(void), dans laquelle tu initialises les ports, et prépositionnes les bits d'interruptions (timers, mode compare ou autres).

    Ex:
    /****************************** ****************************** ****
    Initialisation du PIC
    ****************************** ****************************** ****/
    void init_pic(void)
    {
    // Configuration du module CCP
    CCP1CON = 0x00 ; // module CCP1 désactivée

    // Configuration du port B
    RBPU = 0 ; // active pull up
    RBIE = 0 ;

    // Configuration des I/O
    PwmS1 = 0 ; // à l'init. S1 = 0
    PwmS2 = 0 ; // S2 = 0
    PwmS3 = 0 ; // S3 = 0
    TRISA = ConfigIOPortA ;
    TRISB = ConfigIOPortB ;

    // Timer 0 (8 bits) est utilisé pour le wachtdog à 2,3 s.
    T0CS = 0 ; // Clock interne
    PSA = 1 ; // timer0 = Wachtdog
    PS2 = 1 ; // \
    PS1 = 1 ; // => 111 + WDT => 18 ms x 128 = 2,304 s
    PS0 = 1 ; // /

    // Timer 1 (16 bits) utilisé pour l'horloge: base de 62 µs.
    // Quartz 4 Mhz => 1 instruction = 1 µs

    T1CON = 0x00 ; // Prédivision de l'horloge par 1
    TMR1H = 0xFF ;
    TMR1L = 0xC1 ; // 0xFFFF - 0xFFC1 = 62 => 62 x 1 µs = 62 µs
    TMR1ON = 1 ; // On lance le timer 1
    TMR1IE = 1 ; // On autorise les interruptions du timer 1

    // Autorisation des interruptions
    PEIE = 1 ; // Autorisation des IT peripherique
    GIE = 1 ; // Autorisation général des IT
    }


    Ensuite il faut faire appel à une fonction qui doit commencer obligatoirement par (void)interrupt_xxxxx(void) et qui sera traité par le compilo prioritairement dès que le vecteur interruption sera activé.
    C'est dans cette fonction que tu devra dépatouiller et trouver ton coupable en faisant des tests.

    Ex:

    void interrupt traite_int(void)
    {
    if(TMR1IF)
    {
    TMR1IF = 0 ;
    Flag62us = 1 ;
    TMR1H = 0xFF ;
    TMR1L = 0xC1 ; // 0xFFFF - 0xFFC1 = 62 => 62 x 1 µs = 62 µs
    }

    }

    Dans la fonction principale main(void), tu n'as pas à faire appel à la fonction interruption car elle est automatiquement saisie lors d'une interruption.

    J'espère que tout cela te sera utile.

  6. A voir en vidéo sur Futura
  7. #5
    Gérard

    Re : Quand s'executent les interruptions d'un PIC 16F877???

    Tu devrais lire Bigonoff, c'est de l'assembleur mais les interruptions sont bien expliquées.
    Gérard.

  8. #6
    snorky7

    Re : Quand s'executent les interruptions d'un PIC 16F877???

    Merci de vos réponses!!
    C'est devenu beaucoup plus clair!

  9. Publicité
  10. #7
    invite03481543

    Re : Quand s'executent les interruptions d'un PIC 16F877???

    Pense à faire suivre ton partiel ça m'intéresse de voir comment se sera abordé par tes profs.

  11. #8
    snorky7

    Re : Quand s'executent les interruptions d'un PIC 16F877???

    Citation Envoyé par HULK28 Voir le message
    Pense à faire suivre ton partiel ça m'intéresse de voir comment se sera abordé par tes profs.
    Je peux deja t'envoyer le sujet de l'an dernier. Le voici en pièce jointe.
    Fichiers attachés Fichiers attachés

  12. #9
    invite03481543

    Re : Quand s'executent les interruptions d'un PIC 16F877???

    Amusant comme sujet, surtout la dernière question...

  13. #10
    Houssem20061

    Re : Quand s'executent les interruptions d'un PIC 16F877???

    salut, j'aimerai bien que tu m'envoi la repense de la 1er question de cet examen, 1000000000 merci d'avance
    [email**************l.com[/email]

    Pas d'adresse mail svp sur le forum.
    merci.
    Dernière modification par HULK28 ; 01/05/2008 à 19h19.

  14. #11
    Gérard

    Re : Quand s'executent les interruptions d'un PIC 16F877???

    Citation Envoyé par Houssem20061 Voir le message
    salut, j'aimerai bien que tu m'envoi la repense de la 1er question de cet examen, 1000000000 merci d'avance
    [email**************l.com[/email]

    Pas d'adresse mail svp sur le forum.
    merci.
    Bonjour,
    Bigonoff a traité des interruptions dans ses cours.
    Et c'est en français.

  15. #12
    RISC

    Re : Quand s'executent les interruptions d'un PIC 16F877???

    Salut snorky,

    Tu trouveras des exemples et des tutoriels en C utilisant je crois le PIC16F877 et les interruptions sur ce site :
    http://www.aix-mrs.iufm.fr/formation...indexPIC_C.htm

    a+

  16. Publicité

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/03/2007, 15h43
  2. Pic 16f877 Pic basic pro conseil
    Par ledinblue dans le forum Électronique
    Réponses: 10
    Dernier message: 04/01/2007, 17h26
  3. asservissement d'un moteur DC par un pic 16f877
    Par massinissa dans le forum Électronique
    Réponses: 1
    Dernier message: 17/05/2006, 01h33
  4. interruptions PIC 18F452
    Par koaber dans le forum Électronique
    Réponses: 3
    Dernier message: 09/03/2005, 19h37
  5. interruptions portB PIC
    Par romelec dans le forum Électronique
    Réponses: 6
    Dernier message: 02/05/2004, 10h12
Découvrez nos comparatifs produits sur l'informatique et les technologies.