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

[Pic] Probleme avec code



  1. #1
    wave68runner

    [Pic] Probleme avec code


    ------

    bonjour a tous,
    je codais mon programme, qui fonctionnait comme je le souhaitais et ce sans probleme. Depuis la tantot, il ne fonctionne plus,
    et sur le temps de vous écrire, il refonctionne et ainsi de suite... Sans changer le code.
    j utilise MPlab Sim

    le voici :
    Code:
    /*********************************************************************
    * quartz a 8Mhz => 1 instruct= Fosc/4 = 0.5µs
    *********************************************************************/
    #include <p18f4550.h>
    #include <delays.h>
    #include <timers.h>
    
    #define synchro PORTBbits.RB7	
    #define synchro_TRIS TRISBbits.TRISB7
    
    
    
    /*function prototypes */
    void initialisation(void);
    void traite_interrupt(void);
    void interrupt_basse(void);
    
    
    char demarrage=1,synchro_previous=0;
    
    										// fonction interruption 
    
    #pragma code highVector=0x008			// on déclare une interruption haute
    void atInterrupthigh(void)
    {
    										
    _asm GOTO traite_interrupt _endasm		// on doit éxecuter le code de la fonction traite_interrupt 
    }
    #pragma code // retour à la zone de code
    
    
    #pragma code lowVector=0x018			// on déclare une interruption basse
    void atInterruptlow(void)
    {
    										
    _asm GOTO interrupt_basse _endasm		// on doit éxecuter le code de la fonction interrupt_basse
    }
    #pragma code // retour à la zone de code
    
    
    
    /*********************************************************************
    * routine interruption du passage par zero (signal synchro) 
    et qd Timer1 = la valeur de alpha  ==> sortie=1
    *********************************************************************/
    
    #pragma interrupt traite_interrupt 
    void traite_interrupt(void)
    {
    
    if(INTCONbits.RBIF)				//interrup du a un changement sur RB
    	{
    		sortie=0;
    		synchro_previous=synchro;//lecture obligatoire sur PORTB
    		INTCONbits.RBIF=0;
    		T1CONbits.TMR1ON=1; // TMR1 Activé
    		CCPR1H=0x07; 		
    		CCPR1L=0xD0;		
    	}
    
    							// delai ecouler entre passage par zero et debut impulsions
    if(PIR1bits.CCP1IF) 		// l'IT provient d'une comparaison,
    	{						
    		sortie=1;
    		T1CONbits.TMR1ON=0; // TMR1 désactivé
    		PIR1bits.CCP1IF=0; 	//efface le drapeau d'IT
    	}
    
    }
    
    
    
    
    /*********************************************************************
    * routine interruption basse priorite 
    
    *********************************************************************/
    
    #pragma interrupt interrupt_basse
    void interrupt_basse(void)
    {
    
    }
    
    
    
    
    
    /*********************************************************************
    *  initialisation des peripheriques 
    *********************************************************************/
    void initialisation(void){
    
    
    //configure port sortie/entree
    
    TRISB=0b10000000;
    
    
    INTCONbits.RBIE = 1;		// Enables the RB port change interrupt
    INTCON2bits.RBIP = 1;		// RB Port Change Interrupt = High Priority 
    INTCON2bits.RBPU = 0;		// Pull Up activé sur RB 
    
    
    T1CONbits.RD16=0; 			// TMR1 mode simple (pas de RW)
    T1CONbits.TMR1CS=0; 		// compte les impulsions sur internal clock
    T1CONbits.T1CKPS0=1;
    T1CONbits.T1SYNC=1;
    T3CONbits.T3CCP2=0; 		// mode comparaison entre TMR1 et CCPR1
    CCP1CON=0x0B; 				// Trigger special event sur comparaison (RAZ TIMER1 lors de l'égalité)
    PIE1bits.CCP1IE=1; 			// active IT sur mode comparaison CCP1
    IPR1bits.CCP1IP=1;			// CCPR1 priorite haute
    T1CONbits.TMR1ON=0; 		// TMR1 désactivé
    }
    
    
    
    /*********************************************************************
    * programme principal
    *********************************************************************/
    
    
    void main (void){
    
    initialisation();			// appel du sous-prog d'initialisation
    Delay1KTCYx(1);				// Delay in multiples of 1,000 instruction cycles. 1 instru= 0.5us 
    
    RCONbits.IPEN=1; 			// Interruption prioritaires activées 
    INTCONbits.GIE = 1;			// On autorise toutes les interruptions
    INTCONbits.PEIE = 1;
    
    while(1){
    
    
    }
    }
    en fait le problème vient de l'interruption compare (PIR1bits.CCP1IF), quand mon probleme survient, le programme entre directement dans le sous programme d'interruption avant meme que le reste du programme ne s'éxécute et lance le Timer 1

    D'ou vient la faute?

    Merci pour votre aide

    -----

  2. #2
    EmKa69

    Re : [Pic] Probleme avec code

    Salut,
    c'est peut être le debug qui ne marche pas avec l'interruption.

Discussions similaires

  1. recuperation de code ir rc5 avec pic
    Par taz6cle dans le forum Électronique
    Réponses: 6
    Dernier message: 20/09/2008, 19h25
  2. problème avec code bloc
    Par mat_the_bad_boy dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 10/10/2007, 02h33
  3. probleme avec pic
    Par timodokk dans le forum Électronique
    Réponses: 2
    Dernier message: 19/07/2007, 15h50
  4. [Blanc] problème avec lave vaisselle aeg code 30
    Par fredspeed dans le forum Dépannage
    Réponses: 1
    Dernier message: 29/03/2007, 09h44
Découvrez nos comparatifs produits sur l'informatique et les technologies.