TP interruption (langage C)
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

TP interruption (langage C)



  1. #1
    invited663bf5a

    TP interruption (langage C)


    ------

    Bonsoir,

    je suis étudiant en BTS alternance système électronique et je n'arrive pas a resoudre la dernière question du TP que le prof nous a donné.

    Q: Modifier le programme initial de manière à incrémenter cpt sur l'IT INT0 et décrémenter cpt sur l'IT INT1.

    J'ai compris pour effectuer une interruption que cela soit sur un front montant ou descendant, (j'utilise proteus VSM comme debugger (isis)) j'ai également fait la modification "physique" sur la carte PICDEM2+ soit rajouté un bouton poussoir RB1 avec résistance de pull-up.

    - J'ai mis en pièce jointe l'extrait de mon programme en C

    Cela fait 2 jours que j'essaye de répondre a cette question avec de multiple recherche via le net.

    Il semblerait que le pb ce situe dans le bloc #pragma code vecteur_d_IT=0x08 (adresse de l'interruption définit par le constructeur) // ou 0x18 pour lowpriority

    N'hésitez pas me demander plus de renseignement si il le faut.

    merci d'avance.

    -----
    Images attachées Images attachées  

  2. #2
    RISC

    Re : TP interruption (langage C)

    Salut,

    Plusieurs problèmes potentiels...
    La déclaration de la variable cpt n'est pas correcte.
    Une variable globale modifiée dans une interruption voit avoir le qualificateur volatile (c'est vital si on optimise son programme...) :
    Code:
    volatile int cpt = 0;
    Pour les interruptions il faut également par sécurité faire ceci si tu utilises les 2 interruptions ensemble :
    Code:
    if (INTCONbits.INT0IF && INTCONbits.INT0IE)
    ...
    Code:
    if (INTCON3bits.INT1IF && INTCON3bits.INT0IE)
    ...
    Tu peux choisir d'avoir les 2 interruptions sur le même vecteur ou pas.
    Si c'est sur le même vecteur il faut avoir RCONbits.IPEN=0;. Dans ce cas il est inutile de programmer les bits .....IP
    Si tu utilises 2 vecteurs différents il faut impérativement : RCONbits.IPEN=1;

    Il faut aussi déclarer un 2e vecteur d'interruption pour ta 2e fonction (pas comme tu l'a fait...)
    #pragma code ......=0x18

    a+

  3. #3
    invited663bf5a

    Re : TP interruption (langage C)

    Merci pour ton aide, je vais essayer de faire fonctionner le prg avec l'option de mettre les deux interruptions sur le même vecteur.

    merci...

  4. #4
    invited663bf5a

    Re : TP interruption (langage C)

    Victoire,

    j'ai remplacé les lignes de code que tu m'a indiqué et j'ai également modifié la partie code vecteur:

    Code:
    #pragma code vecteur_d_IT=0x08
    void une_fonction(void)
    
    {
              _asm goto it_sur_rb0_rb1 _endasm // saut vers  "it_sur_rb0_rb1" 
        
    }
    Du coup j'ai mis une seul #pragma directive d'interruption :

    Code:
    #pragma interrupt it_sur_rb0_rb1 // interruption du prg si RB0=1 ; si RB1=1
    encore merci pour ton aide.
    Dernière modification par gienas ; 09/10/2012 à 09h04. Motif: Ajouté les balises code, obligatoires pour les programmes

  5. A voir en vidéo sur Futura

Discussions similaires

  1. PIC : interruption externe et interruption on change ?
    Par invitea3277f60 dans le forum Électronique
    Réponses: 10
    Dernier message: 09/04/2012, 13h41
  2. Langage c interruption sur uart
    Par invitebe17e9d1 dans le forum Électronique
    Réponses: 4
    Dernier message: 05/01/2011, 13h20
  3. de langage C en langage assembleur
    Par invite284746c1 dans le forum Électronique
    Réponses: 1
    Dernier message: 14/05/2009, 13h42
  4. Interruption sur PIC18F252 en langage C
    Par invite23732d21 dans le forum Électronique
    Réponses: 1
    Dernier message: 18/05/2006, 11h24
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...