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

[PIC] Interruption lors de bytes recu sur le port serie d'un PIC



  1. #1
    lcoulon

    [PIC] Interruption lors de bytes recu sur le port serie d'un PIC


    ------

    Bonjour,

    J'utilise la pile Ethernet Microchip v3.75 et je voudrai créer une interruption dès que le Pic ( 18F97J60 ) recoit une donnée sur le Rx de son port série ( patte RC7 )

    Ainsi je voudrai dès l'interruption reçu lire le contenu du buffer de l'uart et reprendre ensuite le déroulement normal du programme.

    Pourriez vous m'aider à mettre en place cette interruption, je ne sais pas comment faire.

    il me semble que c'est avec PIR1bits.RC1IF mais je ne sais comment mettre cette interruption en oeuvre.

    J'utilise Mplab avec C18 de Microchip.


    Merci à vous,

    -----

  2. #2
    F1TVB

    Re : [PIC] Interruption lors de bytes recu sur le port serie d'un PIC

    Bonjour
    J'utilise cette routine avec un 18F452.
    Code:
    /*****************************
    ** Gestion liaison RS232     *
    *****************************/
    #include "commun.h"
    
    
    char *ptecr;
    unsigned char c;
    char buffer[B_SIZE];
    
    
    //=======================================================
    //  Port Serie RS232   8bits, no parity, 1 bit de stop ==
    //=======================================================
    
    void Init_rs232(void)
    {
    	TRISCbits.TRISC7 = 1;  // RX - Set Recieve pin for tristate
    	TRISCbits.TRISC6 = 0;  // TX - Set as Output
    
        SPBRG = 103; 	                // configure la vitesse (BAUD) 9600
        TXSTA = 0x24; 	                // TXEN =1 BRGH=1  
        RCSTA = 0x90;			 		// active l'USART  CREN=1 et SPEN=1
        PIR1bits.TXIF=0;				// IT en emission désactivée
        PIE1bits.RCIE=1;				// IT en reception activée
    
    	RCONbits.IPEN=1;				// active la priorité sur les IT
    	IPR1bits.RCIP=0;				// selectionne basse priorité pour RX (vecteur en 0x18)
    	INTCONbits.GIEH=1;              // autorise IT                 
        INTCONbits.GIEL=1; 				// autorise IT basse priorité
    }
    //------------------------------------------------------
    // Reception un char sur interrupt et mise en memoire --
    //------------------------------------------------------
    #pragma interrupt ISR
    void ISR(void)						// reception d'une interruption
    {
    	if(PIR1bits.RCIF)				// detection IT USART en reception
    	{
    		c=RCREG;
    		*ptecr++ =c;
    		if (ptecr >= &buffer[B_SIZE]) ptecr = buffer;
    		PIR1bits.RCIF=0;
    	}	
    }
    //--------------------------
    // Vecteur d'interruption --
    //--------------------------
    
    #pragma code vecteurITH=0x18
    void une_fonction(void)
    {
    	_asm goto ISR _endasm
    }
    #pragma code
    
    /*
    if (RCIE && RCIF)		// did we receive serial I/O
    	{
    		bufferRX[indexRX] = RCREG;		// add to circular buffer
    		indexRX++; 
    		indexRX &= 0x3F;					// 64-1	=> %64
    		RCIF = 0;
    		serialRX = 1;
    	}
    }
    */
    void Put_char( unsigned char c)
    {
    	while(!TXSTAbits.TRMT);			// attendre registre libre
        TXREG=c;                		// envoie un caractère 
        while(!PIR1bits.TXIF);			// retour apres envoi
    }
    
    void Out_string(const rom char *str)
    {
    unsigned char i,ch;
    	for(i=0;i<20;i++)
    	{
    		ch=*str++;
    		if( ch == 0x0d || ch == 0x0a || ch == 0)	break;
    		Put_char(ch);
    	}
    }	
    void Out_buffer(void)
    {
    unsigned char i,ch;
    	for(i=0;i<20;i++)
    	{
    		ch=buffer[i];
    		if( ch == 0x0d)	break;
    		Put_char(ch);
    	}
    	ptecr=buffer;
    }
    
    void Out_local(char *ptr)
    {
    unsigned char i,ch;
    	for(i=0;i<20;i++)
    	{
    		ch=ptr[i];
    		if( ch == 0x0d || ch == 0x0a || ch == 0)	break;
    		Put_char(ch);
    	}
    }
    A tester et adapter avec votre PIC.
    Courtoisement

Sur le même thème :

Discussions similaires

  1. Communication PIC <-> PC port série
    Par Toufinet dans le forum Électronique
    Réponses: 7
    Dernier message: 27/05/2010, 16h13
  2. envoyer des donnee de pic vers pc par port serie
    Par pikat dans le forum Électronique
    Réponses: 4
    Dernier message: 25/05/2009, 00h14
  3. Réponses: 6
    Dernier message: 07/04/2009, 17h24
  4. Liasion port série / PIC
    Par elektronik-17 dans le forum Électronique
    Réponses: 4
    Dernier message: 20/03/2008, 09h16
  5. PIC et port série -- Parasites ?
    Par Milkidreams dans le forum Électronique
    Réponses: 17
    Dernier message: 18/10/2005, 11h41
Découvrez nos comparatifs produits sur l'informatique et les technologies.