question interruption
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

question interruption



  1. #1
    stephane-mecano

    question interruption


    ------

    Bonsoir,

    j'ai récupéré un code en C sur internet pour un microcontroleur PIC18F2550 qui permet de réaliser une sorte d'alarme, je n'ai pas mis le code en entier juste la partie que je ne comprends pas trop dans les interruptions,

    pourquoi mettre des flags comme c'est fait ci dessous dans les test des interruptions et ne pas mettre le code directement dans l'interruption?

    toutes les interruptions sont testé par des variables flag et passer au main? c'est plus optimisé?

    et comment sait on dans le code que le timer déborde chaque 100 ms??

    merci


    Code:
    void interrupt()
    {
    
        // Débordement du Timer1 chaque 100 ms
    
        if (TMR1IF_bit)
        {
    
            TMR1IF_bit = 0;
            TMR1H = 0x3C;
            TMR1L = 0xB0;
    
    
            Count_S++;                            
    
            if(Count_S == 10)                     
            {
    
                Flag_S = 1;
                Count_S = 0;
    
            }
        }
    
    
        // Interruption déclenché sur la patte RB0 (Basculement en mode alarme)
    
        if( INTCON.INT0IF  == 1)                  
        {
    
            Flag_RB0 = 1;                       
            INTCON.INT0IF  = 0;                  
    
        }
    
    
        // Interruption déclenché sur la patte RB1 (Réglage des heure)
    
        if( INTCON3.INT1IF  == 1)                 
        {
    
            Flag_RB1 = 1;                       
            INTCON3.INT1IF  = 0;                  
    
        }
    
    
        // Interruption déclenché sur la patte RB2 (Réglage des minutes)
    
        if( INTCON3.INT2IF  == 1)                  
        {
    
            Flag_RB2 = 1;                        
            INTCON3.INT2IF  = 0;                   
    
        }
    
    
        // Interruption déclenché sur la patte RB4
    
        if (INTCON.RBIF == 1)
        {
    
            if (LATB.F5 == 1)
            {
    
                Flag_RB5 = 1;
                INTCON.RBIF = 0;
    
            }
        }

    -----

  2. #2
    DAUDET78

    Re : question interruption

    J'ai décidé de ne plus rien connaitre en µC depuis 2005 ....
    Mais un programme en interruption doit être court, très court !
    Donc on positionne un flag pour dire "cette broche a changée d'état" . c'est rapide !
    Ensuite, dans le main, on vient testé le flag
    Tiens, la touche minute a été actionné, voyons voyons ce qu'il faut faire .... on n'a pas le feu quelque part . Si on a un délai de 50 ou 200ms, c'est pas la Kata !
    J'aime pas le Grec

  3. #3
    stephane-mecano

    Re : question interruption

    d'accord mais ca ne prends pas plus de temps, si on doit tester le flag et executer le code dans le main? c'est pas plus rapide de l'écrire dans l'interrupt si le code doit etre court?

    ah bon pourquoi ne pas vouloir connaitre les microcontroleur, n'est ce pas la révolution de l'électronique pourtant

  4. #4
    gabuzo

    Re : question interruption

    Citation Envoyé par stephane-mecano Voir le message
    c'est pas plus rapide de l'écrire dans l'interrupt si le code doit etre court?
    Et si tu as plusieurs sources d'interruption, ça va se passer comment selon toi, tu crois que ce sera plus rapide ?
    Je suis Charlie

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

    Re : question interruption

    Salut,

    Ce qui doit être court c'est pas le temps d'exécution du code, c'est le temps qu'on va passer dans la partie interruption.
    Si le code est un poil plus long mais que ça permet de le déplacer dans la partie main c'est mieux.

    SAUF si le code permettant de mettre un flag a 1 est aussi long que ce que tu veux faire après l'interruption.
    Si c'est mettre une broche a 1... Ça ira aussi vite que de mettre un flag a 1. Autant le faire dans l'interruption... Mais c'est sûrement l'un des rares cas où ça peut le faire.

  7. #6
    paolo123

    Re : question interruption

    Le code contenu dans une interruption doit être le plus court possible, autrement on se risque à des problèmes de dépassement de la pile déja particulièrement limité chez les PIC middle range, ensuite

    un programme est généralement découpé en fonction, le but est logiquement de pouvoir utiliser ses fonctions à un endroit dans le programme, si tu codes une fonction que tu souhaites exécuter lors de l'appel de ta routine d'interruption, tu ne peux PAS l'appeler directement dans l'interruption, le compileur va gueuler et te sortir un truc du genre (réentrance de fonction non autorisé) dans ce cas t'es obligé de passer par un flag que tu vas aller tester dans ton main(), il faut prendre l'habitude de travailler comme ca même lorsque le code dans l'ISR est très court.


    Dans le programme, plusieurs interruptions sont appelés et chacune d'entre elle passe par un Flag sans oublier de le remettre à 0!!(Sinon tu restes dans l'interruption sans jamais en sortir!) et également effacer le drapeau de débordement dans l'ISR avant d'aller dans le main, ce qui est une bonne manière de faire apres il faut peut etre gérer les niveaux de priorités, que se passera il si deux poussoirs sont appuyés en même temps?.

    J'oubliais également de rappeller que la variable flag doit être déclaré en volatile si ce n'est pas déja fait
    Dernière modification par paolo123 ; 18/07/2014 à 19h52.

  8. #7
    paolo123

    Re : question interruption

    Citation Envoyé par stephane-mecano Voir le message

    et comment sait on dans le code que le timer déborde chaque 100 ms??

    [/CODE]
    Le timer1 est configuré de telle sorte à déborder chaque 100 ms, il suffit de regarder le contenu des registres TMR1H et TMR1L pour s'en convaincre, ensuite je suppose que tu as besoin d'une variable de temps de 1 s, c'est grace à la variable count qui attend 10 débordement, ce qui fait 1000 ms = 1 s pour mettre à jour le flag de la seconde

Discussions similaires

  1. Question PIC valeur PORTB avec RBO en interruption
    Par boy30 dans le forum Électronique
    Réponses: 1
    Dernier message: 09/04/2013, 11h20
  2. PIC : interruption externe et interruption on change ?
    Par jlg_47 dans le forum Électronique
    Réponses: 10
    Dernier message: 09/04/2012, 12h41
  3. Question Interruption PIC 16F877
    Par invite1cd8f19a dans le forum Électronique
    Réponses: 10
    Dernier message: 25/03/2010, 21h59
  4. interruption sur pic
    Par alainav1 dans le forum Électronique
    Réponses: 4
    Dernier message: 02/08/2009, 20h13
  5. Question sur interruption PIC16F628
    Par invite1e996da2 dans le forum Électronique
    Réponses: 1
    Dernier message: 13/06/2009, 08h41
Découvrez nos comparatifs produits sur l'informatique et les technologies.