Interruption sur PIC18F252 en langage C
Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

Interruption sur PIC18F252 en langage C



  1. #1
    invite23732d21

    Interruption sur PIC18F252 en langage C


    ------

    Bonjour,

    je cherche à réaliser un programme pour mon PIC18F252

    -j'ai d'abord un choix à faire (if...) en fonction de la valeur de RB2 (entrée digitale), ça c'est bon!
    -si RB2=1, alors, après avoir détecter un front montant sur RB1(signal carré en entrée de cette patte), je dois réaliser les instructions.

    comment faire en C? ? je crois qu'il s'agit d'une interruption mais je ne maîtrise pas trop cette partie. en plus il y a une question de priorité si j'ai bien compris... je suis un peu perdue, pouvez-vous m'aider? !

    merci!

    -----

  2. #2
    invite23732d21

    Re : Interruption sur PIC18F252 en langage C

    J'ai essayé d'écrire un code d'interruption mais rien ne se passe au front montant sur RB1.


    voilà mon code pour tester les interruptions:

    #include <p18f252.h>
    #include <adc.h>
    #include <timers.h>
    #include <delays.h>


    /****************************** ***********************/
    /* définitions des pins I/O */
    /****************************** ***********************/
    #define DEL1_TRIS TRISCbits.TRISC1
    #define DEL2_TRIS TRISCbits.TRISC2
    #define DEL3_TRIS TRISCbits.TRISC3
    #define DEL1 PORTCbits.RC1
    #define DEL2 PORTCbits.RC2
    #define DEL3 PORTCbits.RC3
    #define zero_de_courant_TRIS TRISBbits.TRISB1
    #define zero_de_courant PORTBbits.RB1


    void MyInterrupt (void);
    void delai (void);
    void main (void);


    /******************************/
    /* fonction interruption */
    /******************************/
    void MyInterrupt(void);

    #pragma code highVector=0x008
    void atInterrupthigh(void)
    {
    _asm GOTO MyInterrupt _endasm
    }
    #pragma code // retour la zone de code



    /*********************/
    /* Interruptions */
    /*********************/
    #pragma interrupt MyInterrupt
    void MyInterrupt(void)
    {
    /* sauvegarder des registres avant l'interruption */
    unsigned char sauv1;
    unsigned char sauv2;

    sauv1 = PRODL;
    sauv2 = PRODH;


    DEL1 = 1;
    DEL2 = 1;
    DEL3 = 1;
    delai();
    delai();
    DEL3 = 0;
    delai();
    delai();
    DEL2 = 0;
    delai();
    delai();
    DEL1 = 0;

    /* on restaure les registres sauvegardes avant l'interruption */
    PRODL = sauv1;
    PRODH = sauv2;

    }


    /*********************/
    /* Délai */
    /*********************/
    void delai (void)
    {
    int i;
    for (i = 0; i < 10000; i++)
    ;
    }


    /****************************** */
    /* fonction principale */
    /****************************** */

    void main (void)
    {

    /* On active toutes les interruptions */
    INTCONbits.GIE = 1;
    INTCONbits.PEIE = 1;

    /* on configure les pins en I/O */
    DEL1_TRIS = 0;
    DEL2_TRIS = 0;
    DEL3_TRIS = 0;
    zero_de_courant_TRIS = 1;

    /*on demarre la boucle infinie */
    while (1)
    { DEL1 = 1;
    delai();
    delai();
    DEL1 = 0;
    delai();
    delai();
    }
    }



    et je n'ai aucune idée de pourquoi ca ne marche pas...

Discussions similaires

  1. adresse de retour interruption sur PIC
    Par arzew dans le forum Électronique
    Réponses: 24
    Dernier message: 19/11/2007, 12h12
  2. Faire fonctionner un PIC18F252
    Par Platipu$ dans le forum Électronique
    Réponses: 12
    Dernier message: 22/05/2007, 18h36
  3. diference PIC18F252 et PIC18F2520 ?
    Par dannydan dans le forum Électronique
    Réponses: 2
    Dernier message: 02/08/2006, 22h28
  4. Différence entre PIC18f252 et PIC18f452
    Par error2 dans le forum Électronique
    Réponses: 22
    Dernier message: 06/07/2006, 20h33
Découvrez nos comparatifs produits sur l'informatique et les technologies.