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

Problème d'interruption avec Pic18f



  1. #1
    kronanberg

    Problème d'interruption avec Pic18f


    ------

    Bonjour,

    Voila, j'utilise un PIC18F2523 que je programme avec le compilateur Microchip C18 avec l'environnement MPLAB.

    J'ai configuré mon timer0 pour qu'il déclenche une interruption à chaque overflow du timer.
    Le flag du timer0 passe bien à 1 lorsqu'il y a un dépassement.

    Mais le souci est que je n'arrive pas à trouver comment appeler la fonction interruption.
    Pour le moment j'ai le code suivant dans mon main :
    Code:
    	
    if(INTCONbits.TMR0IF == 1)
    {
    	INTCONbits.TMR0IF = 0;
    
    	if(PORTCbits.RC4 == 1)
    		PORTCbits.RC4 = 0;
    	else
    		PORTCbits.RC4 = 1;
    }
    J'aurai voulu savoir comment configurer la table d'interruption pour pouvoir mettre ce bout de code dans la fonction d'interruption.

    Merci d'avance pour vos réponses !!

    -----

  2. Publicité
  3. #2
    kronanberg

    Re : Problème d'interruption avec Pic18f

    bon ben finalement, j'ai trouvé !!!
    J'ai posé la question un peu vite mais ça faisait 1 bonne heure que je tournait en rond sur ce problème.

    Donc voici le code que j'utilise :

    Code:
    void timer_isr();
    
    #pragma code HightVector=0x08
    void atInterrupthigh(void)
    {
    	_asm GOTO timer_isr _endasm
    }
    #pragma code
    
    
    #pragma interruptlow timer_isr
    void timer_isr()
    {
    	INTCONbits.TMR0IF = 0;
    	if(PORTCbits.RC4 == 1)
    		PORTCbits.RC4 = 0;
    	else
    		PORTCbits.RC4 = 1;
    }
    ça me parait un peu compliquer quand même !!
    Puisque on est obliger de définir une interruption en priorité haute et l'exécuter en priorité basse !!!!

    Et du coup comme je n'ai pas encore bien tout compris comment définir une interruption seulement en basse ou en haute priorité ?

    Merci pour les réponses

  4. #3
    RISC

    Re : Problème d'interruption avec Pic18f

    Salut,

    Ta déduction est fausse...

    Un exemple pour faire cela correctement :

    Code:
    #pragma code high_vector=0x08
    void interrupt_at_high_vector(void)
    {
       _asm goto high_isr _endasm
    }
    
    
    #pragma code low_vector=0x18
    void interrupt_at_low_vector(void)
    {
       _asm goto low_isr _endasm
    }
    .....
    #pragma interrupt high_isr
    void high_isr(void)
    {
    	if(INTCONbits.INT0IF)			
    		{						
    			INTCONbits.INT0IF = 0;	
    			INT0Flag = 0x01;		
    		}							
    	else
    		{							
    			Nop();					
    		}
    }
    
    
    
    
    #pragma interruptlow low_isr
    void low_isr(void)
    {
    
    }
    Un conseil : va voir le tutoriel bien fait sur les PIC18 + C18 ici.
    a+

  5. #4
    kronanberg

    Re : Problème d'interruption avec Pic18f

    Salut !!

    Merci pour les conseils, je comprend mieux le fonctionnement !!
    D'ailleurs ils sont bien fait ces tutoriels !

    A+

  6. A voir en vidéo sur Futura

Discussions similaires

  1. [PIC18F]-module USART - problème avec le bit OERR
    Par jorg1n dans le forum Électronique
    Réponses: 6
    Dernier message: 28/10/2009, 08h37
  2. [C / PIC18] - Problème de détection d'interruption
    Par jorg1n dans le forum Électronique
    Réponses: 15
    Dernier message: 25/08/2009, 09h47
  3. probleme d'interruption microcontroleur ATMEGA32
    Par zoro95100 dans le forum Électronique
    Réponses: 1
    Dernier message: 25/06/2009, 10h17
  4. Probleme d'interruption sur PIC 18F4420
    Par mat_31 dans le forum Électronique
    Réponses: 2
    Dernier message: 09/06/2008, 09h45
  5. Réponses: 3
    Dernier message: 01/11/2005, 23h45
Découvrez nos comparatifs produits sur l'informatique et les technologies.