[PIC]- Gestion Interruption -> Module EUSUART
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

[PIC]- Gestion Interruption -> Module EUSUART



  1. #1
    jorg1n

    [PIC]- Gestion Interruption -> Module EUSUART


    ------

    Bonjour,

    j'utilise un PIC18F6722 pour réaliser une communication RS485 MODBUS, la réception et l'envoi se passe correctement, mais la détection se fait par polling:
    Code:
    for(;;)
    {
    if (RCIF) {
    	fonction =ReadMBFrame();
    	if (fonction == 3) 
    	   readRegResponse();	
    	else
    	   writeBadRequest(fonction);
    
    	ENABLE_DRIVER_RS485 = 0;
    
    	}
    }
    Et je voudrais réaliser la détection par interruption, mais je ne vois pas comment réaliser cela. Vu que j'ai déja une génération d'IT par un TImer, comment ça se passe pour la priorité?
    Pour ma part, je déclare une interruption toujours comme cela:

    Code:
    #pragma interrupt DEMARRAGE
    void DEMARRAGE(void)
    {
      if (RCONbits.TO == 0)		//	Test du drapeau d'IT du WDT
    	{
         _asm 
    	 RESET
    	 _endasm
        }
    
      if(INTCON3bits.INT1IE)                            // Présence d'un interruption sur INT1
      {
        if(INTCON3bits.INT1IF)                          // Si le flag d'INT est activé
           {
            myState = START;                        	// Démarrage du programme
            INTCON3bits.INT1IF=0;                       // Effacement du flag d'interruption
           }
       }
    
      if(INTCON3bits.INT3IE)                            // Présence d'un interruption sur INT3
      {
        if(INTCON3bits.INT3IF)                          // Si le flag d'INT est activé
           {
    		LCD_ONOFF = 0;
    		BACKLIGHT = 0;
            INTCON3bits.INT3IF=0; 
           }
       }
    
      if(INTCONbits.TMR0IE)                             // Présence d'un interruption sur Timer0
        {
        if(INTCONbits.TMR0IF)                           // Si le flag INT du Timer est activé
            {
              TMR0H = 0xE1;                         	// Valeur pour obtenir un Timer de 400ms
              TMR0L = 0x7C;                         	// Valeur pour obtenir un Timer de 400ms
    
              flagIT_Backlight++;                   	// Incrémentation de la variable flagIT_Backlight
              flagIT_ScreenStandby++;               	// Incrémentation de la variable flagIT_ScreenStandby
              flagIT_400ms = 1;                     	// Mise à 1 du flag Timer 400ms
    		  flagIT_GEStart++;
    
              INTCONbits.TMR0IF = 0;                   	// Effacement du flag d'interruption
            }
        }
    
    }
    
    #pragma code high_vector=0x08
    void TIMER_400MS(void)
    {
    	_asm 
    	goto DEMARRAGE
    	_endasm
    }
    #pragma code
    Pourriez me dire comment faire pour le module EUSUART (module de gestion de COM ext) ?

    MErci d'avance

    -----

  2. #2
    jorg1n

    Re : [PIC]- Gestion Interruption -> Module EUSUART

    Bon, je pense avoir trouvé mon problème...

    Tout d'abord on active la génération d'IT du module EUSART avec le bit:
    RCIE en le mettant à 1 et le bit de flag est : RCIF.

    Le seul problème c'est que dès que le µC détecte la réception d'un message, le registre RCREG n'est donc plus vide, et il y a une génération de l'IT tant que le registre est plein, il faut donc récupérer le résultat et le mettre a zéro dans la routine d'IT.

    Et maintenant tout marche bien...A moins que vous ayez des remarques sur ce que je viens de dire, je suis preneur.

    Bonne fin de journée a tous

  3. #3
    sdec25

    Re : [PIC]- Gestion Interruption -> Module EUSUART

    Salut.
    RCIE en le mettant à 1 et le bit de flag est : RCIF.
    Oui, c'est le même principe pour toutes les interruptions : Si bit IE = 1, bit IF = 1 et GIE = 1, une interruption est déclenchée.
    Et il y a 2 priorités pour les interruptions sur PIC18. Elle se choisit avec le bit IP. Il y a donc 2 vecteurs d'interruption : haute priorité = 0x08, basse priorité = 0x18

    A+

  4. #4
    jorg1n

    Re : [PIC]- Gestion Interruption -> Module EUSUART

    Merci Sdec25 pour ces précisions...

  5. A voir en vidéo sur Futura

Discussions similaires

  1. interruption sur pic
    Par alainav1 dans le forum Électronique
    Réponses: 4
    Dernier message: 02/08/2009, 20h13
  2. interruption pic 18f4520
    Par bird12358 dans le forum Électronique
    Réponses: 19
    Dernier message: 25/07/2009, 22h07
  3. PIC interruption RS232
    Par inviteb229ed52 dans le forum Électronique
    Réponses: 2
    Dernier message: 14/05/2009, 16h34
  4. PIC : Gestion du module I2C
    Par schneiderj dans le forum Électronique
    Réponses: 0
    Dernier message: 17/04/2008, 13h32
  5. Gestion des interruption avec un PIC
    Par schneiderj dans le forum Électronique
    Réponses: 3
    Dernier message: 08/03/2008, 16h26
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...