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

interruption INT pic18F45K22



  1. #1
    ikramo93

    interruption INT pic18F45K22

    bonjour
    je veux introduire l'interruption INT sur RB0
    par exemple je tape '=' du clavier et j'aurai le résultat final
    le clavier est inséré au portB alors l'interrution INt ne fonctionne pas ( j'ai des erreur dans le code )
    j'au un message de ce type '"Reentrancy is not allowed: function 'Keypad_Key_Click' called from two threads __Lib_Keypad4x4.c"
    vous trouverez ci joint le code ainsi qu'une image de isisje ne peux pas envoyer le fichier isis)
    isispic18F45K22.txtpic18F45K22.PNG
    merci d'avance

    -----


  2. Publicité
  3. #2
    JPL

    Re : interruption INT pic18F45K22

    Il serait préférable de poster le code dans le message lui-même en utilisant la balise [code]...[/code] (# dans la barre d’outils de l’éditeur en mode avancé).
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  4. #3
    paulfjujo

    Re : interruption INT pic18F45K22

    bonjour,


    Que fait la touche ON/C ?
    Quel est le retour code (kp) generé par la touche '=' ?

    détails sur Keypad_Key_Click(); ?

    RB0 semble deja géré par cette ce sous programme.
    Verifier si le code de la touche '=' inclus un changement sur RB0
    pour verifier si chaque appui sur '=' du clavier pourrait modifier le bit RB0
    pour initialiser l'interrupt RBO sur front montant ou descendant


    Code:
    void interrupt(void)                   
    {
     if ((INT0IE_bit) && (INT0IF_bit))
      {
      if (kp= ??    ;   // <--code de '=')
        { flag=1;
    	}
      INTCON.INT0IF = 0;          // clear the interrupt flag
    
    }
    et exploiter le flag dans une boucle du programme principal ;


    Code:
      do
      {
      ..
       do{
         kp = Keypad_Key_Click();             // Store key code in kp variable
        }while (!kp);
      
      
      if(flag==1) final();
      .....
      
      }while((counter<2)&&(flag==0));

  5. #4
    ikramo93

    Re : interruption INT pic18F45K22

    on/c ne fait rien c'est exclu du code
    le code de '=' c'est '=' (case 15: kp = '='; break; // #)
    pic18F45K22.PNG][/PHP] . j'ai essayé ce code que tu m'a donné
    tjrs les mêmes erreurs

  6. #5
    RISC

    Re : interruption INT pic18F45K22

    Salut,
    1/ Le test d'égalité en C c'est == pas = (erreur classique des débutants)
    2/ même si l'on a qu'une interruption il vaut mieux tester que c'est bien celle qu'on attend...

    Code:
    void interrupt(void)                      // when i press '=' i got the final results
    {
      if (INTCON.INT0IF && INTCON.INT0IE)    
    
      kp = Keypad_Key_Click();
      if (kp=='=')
        {final();  }
    
      INTCON.INT0IF = 0;          // clear the interrupt flag
      flag=1;
    }
    Pour éviter ce genre d'erreur (==) il suffit d'écrire le test à l'envers :
    Code:
      if ('='==kp)
    car si on se trompe (= au lieu de ==) le compilateur détecte alors une erreur à la compilation....(tentative d'affectation d'une valeur à une constante)

    avec ton erreur
    Code:
    if (kp[B]='=')
    , cela ne génère pas d'erreur et...le test est toujours vrai car il s'agit en fait d'une affectation qui produit toujours la valeur vraie.

    a+
    Dernière modification par RISC ; 03/07/2017 à 00h19.
    Ma marotte ? les microcontrôleurs ;=)

  7. A voir en vidéo sur Futura

Sur le même thème :

Discussions similaires

  1. LCD et PIC18F45K22
    Par Poutch10 dans le forum Électronique
    Réponses: 9
    Dernier message: 27/04/2015, 08h08
  2. CAN sur PIC18F45K22
    Par flolarajasse dans le forum Électronique
    Réponses: 25
    Dernier message: 05/11/2014, 13h08
  3. PIC18F45K22, kit de développement EASYPIC7
    Par woodelectro dans le forum Électronique
    Réponses: 2
    Dernier message: 08/05/2013, 20h47
  4. Problème CAN PIC18F45K22
    Par denver60 dans le forum Électronique
    Réponses: 4
    Dernier message: 09/06/2012, 13h59
  5. PIC : interruption externe et interruption on change ?
    Par jlg_47 dans le forum Électronique
    Réponses: 10
    Dernier message: 09/04/2012, 12h41