18F452 interruption timmer 0 et changement etat port possible?
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

18F452 interruption timmer 0 et changement etat port possible?



  1. #1
    invite4828afd1

    Exclamation 18F452 interruption timmer 0 et changement etat port possible?


    ------

    bonjour

    je travaille un programme (pour un PIC 18F452 )dans lequel je compte avec le timmer 0 une tempo A et ensuite au débordement le pic exécute des actions(utilisation de l'USART sans interruption pour l'émission et réception).Cette interruption est de bas niveau et cet partie fonctionne parfaitement.
    Maintenant je voudrais rajouter à cela une interruption prioritaire de haut niveau qui détecterai un changement d'état du PORT RB4.

    est-ce possible??je n'arrive pas a combiner les deux mon pic rentre direct en interruption de haut niveau...

    Que faire...

    -----

  2. #2
    invite03481543

    Re : 18F452 interruption timmer 0 et changement etat port possible?

    Bonsoir,

    quand vous détectez une action en RB4, faut-il que vous interrompiez l'USART ou non?
    Quelle action devez-vous faire précisément avec cet évènement?

  3. #3
    MorpheusPic

    Re : 18F452 interruption timmer 0 et changement etat port possible?

    as tu penser a definir la prioritee de l'interruption RB4 ?



    INTCON2 REGISTER

    bit 0 RBIP: RB Port Change Interrupt Priority bit
    1 = High priority
    0 = Low priority
    et celle pour l'usart


    IPR1: PERIPHERAL INTERRUPT PRIORITY REGISTER 1

    bit 5 RCIP: USART Receive Interrupt Priority bit
    1 = High priority
    0 = Low priority
    bit 4 TXIP: USART Transmit Interrupt Priority bit
    1 = High priority
    0 = Low priority
    a+

  4. #4
    invite4828afd1

    Re : 18F452 interruption timmer 0 et changement etat port possible?

    alors en faite ça se déroule ce cette maniéré..

    le pic compte une temporisation de plusieurs secondes avec le timmer 0. si pendant cette "tempo" aucunes interruption haute (RB4 passe a l'état bas ) se pressente le timmer déborde et exécute une actions A...
    Si pendant la tempo RB4 passe a l'état bas alors le pic passe en interruption haute et exécute une autre action B.voila un extrait de mon code

    #include <p18F452.h>
    #include <usart.h>
    #include <delays.h>
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #pragma config WDT = OFF
    void configuration1(void);
    void tempo15(void);

    void inter(void) ;
    void inter2(void) ;
    int G ;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////

    #pragma code LowVector=0x18
    void atInterruptlow(void)
    {
    _asm GOTO inter _endasm
    }
    #pragma code


    //////////////////////////////////////BAS LEVEL///////////////////////////////////////////////////////////
    #pragma interlow vect18
    void inter()
    {

    INTCONbits.TMR0IF=0;
    G = 0;
    PORTBbits.RB2 =!PORTBbits.RB2;

    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////



    //////////////////////////////////////HAUT LEVEL///////////////////////////////////////////////////////////
    #pragma interlow vect08
    void inter2()
    {
    T0CON=0b00000111;
    PORTBbits.RB1=!PORTBbits.RB1;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////


    #pragma code HightVector=0x08
    void atInterrupthigh(void)
    {
    _asm GOTO inter2 _endasm
    }
    #pragma code


    /////////////////////////////////////////////////////////////////////////////////////////////////

    void tempo15(void)
    {
    T0CON=0b0000111;
    TMR0H=0x001B;
    TMR0L=0x1E40;
    INTCONbits.TMR0IE=1;// autorise IT débordement
    RCONbits.IPEN=1;// Interruption prioritaires
    INTCONbits.GIE=1;

    }
    ///////////////////////////////////////
    void configuration1(void)
    {
    TRISBbits.TRISB0=1;
    TRISBbits.TRISB1=0;
    TRISBbits.TRISB3=0;
    TRISBbits.TRISB4=1;
    TRISBbits.TRISB2=0;
    TRISAbits.TRISA4=1;
    TRISAbits.TRISA5=1;
    TRISAbits.TRISA0=1;

    PORTBbits.RB3=0;
    PORTAbits.RA0=1;
    PORTBbits.RB1=0;
    PORTAbits.RA4=1;
    PORTAbits.RA5=1;
    PORTBbits.RB0=1;
    PORTBbits.RB4=1;
    PORTBbits.RB2=0;
    void main(void)

    }
    void main(void)

    {
    configuration1();


    tempo15();
    PORTBbits.RB2 =1 ;
    RCONbits.IPEN=1;// Interruption prioritaires
    INTCONbits.GIE=1;
    INTCON2bits.RBIP=1;
    INTCONbits.PEIE = 1;
    INTCONbits.RBIE = 1;
    INTCONbits.RBIF = 0;


    while(1)

    {
    TMR0H=0x001B;
    TMR0L=0x1E40;
    T0CON=0b10000111;
    INTCONbits.TMR0IE=1;// autorise IT débordement
    RCONbits.IPEN=1;// Interruption prioritaires
    INTCONbits.GIE=1;
    G = 1;
    }
    }

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

    Re : 18F452 interruption timmer 0 et changement etat port possible?

    Pourquoi mon programme rentre direct en interruption haute?

  7. #6
    invite4828afd1

    Re : 18F452 interruption timmer 0 et changement etat port possible?

    personne n'a une idee?

  8. #7
    guillaume83

    Re : 18F452 interruption timmer 0 et changement etat port possible?

    bonsoir,
    pouquoi inclure l'activation des interuptions dans une boucle infinie?
    moi je verrais ca plustot ca de cette facon:

    main
    initialisations
    interuptions on
    boucle sans fin


    @+

  9. #8
    MorpheusPic

    Re : 18F452 interruption timmer 0 et changement etat port possible?

    je connais pas beaucoup le C mais tu devrais pas utiliser "#pragma interhigh vect08" ?
    Code:
    //////////////////////////////////////HAUT LEVEL///////////////////////////////////////////////////////////
    #pragma interlow vect08       <-------------   interlow ?? tu devrais pas avoir interhigh ??
    void inter2()
    {
    T0CON=0b00000111;
    PORTBbits.RB1=!PORTBbits.RB1;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    a+

Discussions similaires

  1. interruption haute priorite sur 18F452
    Par invite4828afd1 dans le forum Électronique
    Réponses: 2
    Dernier message: 21/02/2009, 14h51
  2. Etat triplet/ Etat singulet
    Par invite3f56422b dans le forum Physique
    Réponses: 5
    Dernier message: 20/05/2008, 11h51
  3. Réponses: 1
    Dernier message: 09/11/2007, 16h05
  4. Etat bas sur Port parallèle
    Par Slimounet45 dans le forum Électronique
    Réponses: 0
    Dernier message: 20/05/2007, 09h26
  5. Interruptions sur changement d'état du port B
    Par Toufinet dans le forum Électronique
    Réponses: 2
    Dernier message: 29/05/2006, 21h40
Découvrez nos comparatifs produits sur l'informatique et les technologies.