interruption avec passage d'arguments
Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

interruption avec passage d'arguments



  1. #1
    picall

    interruption avec passage d'arguments


    ------

    Bjr tt le monde

    la je travail sur la mise en service d'une communication RS232 avec un pic 16F877, et avec l'aide des participants de ce forum, j'y suis arriver a communiquer entre le PC et le PIC, merci tt le monde encore une fois.

    la je veux aller plus loin dans ma programmation donc j'ai encore des question,

    alors j'explique:
    - j'essaye de programmer une interruption sur l’entrée RB0 cette interruption va déclencher une impulsion sur RA1 avec une temporisation
    - la temporisation en question sera communiqué via la communication rs 232:

    mais comme l'interruption est déclarée avant le programme principale elle prend pas la nouvelle valeur ?
    et je vois pas comment programmé une interruption avec passage d'argument (POUR UN PASSAGE D'ARGUMENT IL FAUT FAIRE l'appele!!) une interruption c'est automatique , non!!

    Code:
    #pragma origin 4
    	interrupt passge_par_zero(	unsigned char milisecond)
    	{
    	 int_save_registers      // sauvegarde des registres de travail
    
    
    		if(INTF){           //test le flag!!!
    						
    							
    									PORTA.1=1;   // mettre le port A à 1
     							
    								
    									PORTA.1=0; //remettre le port A à 0
    							//*******************************************************
    
    
    
    					INTF=0; // REMISE A ZERO DU FLAG.
    				}
    	int_restore_registers   // réstauration 
    	}
    
    
    //***************************************************************************************
    //******************************************************************************
    //---------------------------- Programme Principal ----------------------------------------
    
    void main ( void ) 
    
    putst("Enter temporisation ??\n");
    putchhex(millisec);
    putst("\n");
    while(1)
    {
    millisec = getch();
    putst("you have entered :\n" );
    putchhex(millisec);
    putst("\n");
    putst("Enter temporisation ??\n");
    
    }
    donc ce j'aimerai savoir, c'est cmt transmettre la variable millisec en argument a l'interruption ???
    merci d'avance

    -----

  2. #2
    Jack
    Modérateur

    Re : interruption avec passage d'arguments

    Utilise une variable globale.

    - j'essaye de programmer une interruption sur l’entrée RB0
    Mais ce que je ne comprends pas c'est que tu décides du moment où tu génères l'interruption, alors qu'une interruption est un événement asynchrone, donc dont on ne connais pas le moment de l'apparition.

    A+

  3. #3
    picall

    Re : interruption avec passage d'arguments

    merci Jack pour ta réponse

    ben justement , non je decide pas du moment de mon interruption, c'est un événement extérieur.
    et pour la variable global j'ai deja essayé et rien ca na pas marché..

    si non cmt ecrire une interruption comme une fonction;

    -prototype avant le pro principlae
    -ecriture de la LA FONCTION A LA FIN DU PROGRAMME PRINCIPALE??

    J'AI ESSAYE DE FAIR CA MAIS CA ME MET ERREUR!!

  4. #4
    Jack
    Modérateur

    Re : interruption avec passage d'arguments

    et pour la variable global j'ai deja essayé et rien ca na pas marché..
    Il n'y a pas de raison que çà ne fonctionne pas.

    si non cmt ecrire une interruption comme une fonction;
    Comme c'est non standard, chaque compilateur a sa propre syntaxe. Je ne connais pas celle de ton compilateur. Il faut regarder sa doc.

    -prototype avant le pro principlae
    -ecriture de la LA FONCTION A LA FIN DU PROGRAMME PRINCIPALE??
    C'est comme pour tout programme en C, il faut que la fonction ait été déclarée avant tout appel. Et il faudra évidemment qu'elle ait été définie à l'édition de lien. Donc, si tu mets tout ton code dans un seul fichier, tu peux faire comme tu dis.

    A+

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

    Re : interruption avec passage d'arguments

    ok je vais réessayé avec la variable globale, parce que tt le reste ca ne fonctionne pas (prototypes ......)!!

  7. #6
    RISC

    Re : interruption avec passage d'arguments

    Salut,

    Par définition, une fonction d'interruption ne reçoit ni ne retourne JAMAIS de paramètres.
    Si tu veux modifier une variable du programme principal dans ne interruption il faut la déclarer en global et avec le qualificateur volatile :

    exemple :
    Code:
    volatile char toto;
    
    void main(void)
    ...
    a+

  8. #7
    picall

    Re : interruption avec passage d'arguments

    re: merci RISC pour la réponse enfaite c'est ce que j'ai fais j'ai déclare une variable globale et sans meme utilisé le mot clé volatile et ca marche bien. ma prochaine mission est de faire une fonction de calculer la fréquence secteur, la periode et de l'utiliser pour le reste du programme

    donc merci a tt le monde pour votre aide et a la prochaine pour d'autre questions et bonne fete de fin d"anné

  9. #8
    Jack
    Modérateur

    Re : interruption avec passage d'arguments

    Dans ce genre de situation, il faut mieux tout de même déclarer la variable comme volatile. Sachant que le programme d'interruption peut venir la modifier à tout moment, le compilateur, qui ne peut pas savoir ce genre de chose peut effectuer des optimisations indésirables en considérant que certaines instructions sont inutiles.

    Par exemple, tu peux tester la valeur de cette variable dans une boucle et n'en sortir que si elle prend une valeur particulière (mise à jour dans le programme d'IT). Le compilateur, qui ne voit aucune instruction modifier cette variable dans la boucle, peut prendre la liberté de supprimer la boucle qui lui semble inutile.

    A+

  10. #9
    RISC

    Re : interruption avec passage d'arguments

    PICALL,

    +1 pour l'explication de Jack.

    Même si tu ne comprends pas complètement l'utilité de volatile, ajoutes le à toute variable globale modifiée dans les interruptions.
    C'est malheureusement souvent mal expliqué dans les bouquins de "C".
    Cela ne génère pas de code en plus...et le risque que tu prends est très important si un jour tu optimises ton code au niveau du compilateur.

    a+

  11. #10
    picall

    Re : interruption avec passage d'arguments

    bonjour, et bonne année a tt le monde

    Merci pour les deux dernier msg de RISC et jack, n'ayant repris mon projet qu'aujourd'hui, je vais appliquer les modifications sur la variable globale.

    Merci.

  12. #11
    picall

    Re : interruption avec passage d'arguments

    Re bonjour,

    pour les besoins de mon projet j'aurais besoin d'une détection de passage par zéro qui servira a déclencher l'interruption de mon PIC.
    j'ai vu le moc3041, il fais une détection de passage par zéro mais que je peut pas utiliser

    puis-je trouver un composant avec une sortie impulsionnelle de détection de passage par zéro??

  13. #12
    Jack
    Modérateur

    Re : interruption avec passage d'arguments

    Pour ça, il va falloir que tu connectes de manière sécurisée le secteur à une entrée du pic. Je ne connais pas ton niveau en élec, donc vu les risques encourus, je ne vais pas prendre la responsabilité de te lancer dans ce genre d'aventures.

    A la limite, le plus sûr est de prélever le signal en sortie du transfo d'alimentation et de passer par un opto.

    A+

  14. #13
    picall

    Re : interruption avec passage d'arguments

    connecter le secteur a une entrer du pic, ca sera l'entrée RB0!! je l'utilise comme entrée d’interruption, mais je dois avoir un signal logique dessus, en plus je veux pas trop chargé mon pic (interuption RB0, communication serie...)

    jai trouvé un montage avec un opto qui genere un signal en sortie a chaque passage par zero de l'alternance avec l'opto hcpl-2400 que pensez vous??

    voila le lien : http://www.logiclic.org/index.php/mo...e-de-puissance

  15. #14
    picall

    Re : interruption avec passage d'arguments

    ca parait bizar d'ataquer directement avec le secteur dans le shem du lien que j'ai posté avant ,non??
    et puis en sortie, la valeur du signal dépendra de du vcc connecté!!!

Discussions similaires

  1. problème avec exercice asm avec nasm et interruption dos 21h
    Par anouarattn dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 13/12/2011, 05h27
  2. Interruption avec PIC18F45K20
    Par *Baby* dans le forum Électronique
    Réponses: 6
    Dernier message: 16/06/2010, 22h09
  3. Fonction avec nombre d'arguments variables
    Par antoine6 dans le forum Électronique
    Réponses: 4
    Dernier message: 12/05/2010, 20h11
  4. Interruption avec 16f84
    Par invitec25c7d0a dans le forum Électronique
    Réponses: 36
    Dernier message: 10/06/2009, 15h58
  5. interruption avec timer1
    Par invite29c140ac dans le forum Électronique
    Réponses: 26
    Dernier message: 05/04/2009, 16h14
Découvrez nos comparatifs produits sur l'informatique et les technologies.