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

Langage c interruption sur uart



  1. #1
    dodge256

    Langage c interruption sur uart


    ------

    Bonjour et bonne année a tous .

    Je communique en rs232 entre deux pic ( liaison irda ) .
    Mon problème se trouve au niveau des interruptions .
    Avec un debbuger icd2 , les interruptions fonctionnent 3 voir 4 fois puis après plus rien .
    Sans icd2 , les interruptions ne fonctionnent plus du tout .

    j'utilise le compilateur ccs et un 18f4550 a 4Mhz.

    Pourriez vous me dire ou est le problème dans mon programme ?


    Code:
    ///////////////////////////////////////////////////////////////////////////////
    // DECLARATION DES VOIDS                                                     //
    ///////////////////////////////////////////////////////////////////////////////
    void code (void);
    void emmission(void);
    void reception(void);
    
    
    ///////////////////////////////////////////////////////////////////////////////
    //  VARIABLES                                                                //
    ///////////////////////////////////////////////////////////////////////////////
    int codage ;            // codage 
    int lecture ;           // valeur reçu
    
    
    ///////////////////////////////////////////////////////////////////////////////
    //  interruption sur rx                                                      //
    ///////////////////////////////////////////////////////////////////////////////
    #int_RDA
    
    RDA_isr() 
    {
     reception();
     code();
    
    	         
       if(lecture==codage)
       {
       output_bit(pin_a2,1);
       delay_ms(1000);
       output_bit(pin_a2,0);
       emmission();
       
       }
       else
       {
       output_bit(pin_a1,1);
       delay_ms(1000);
       output_bit(pin_a1,0);
         }
    
    }
    
    ///////////////////////////////////////////////////////////////////////////////
    // EMMISSION                                                                 //
    ///////////////////////////////////////////////////////////////////////////////
    
    void emmission (void)
    {
       
       putchar(codage);                                //envoi
    
    }
    
    ///////////////////////////////////////////////////////////////////////////////
    //   RECEPTION                                                               //
    ///////////////////////////////////////////////////////////////////////////////
    void reception (void)
    {
     lecture=getchar();                 // enregistre la valeur en rx
    }
    
    ///////////////////////////////////////////////////////////////////////////////
    //    PERMET DE DETERMINERLE CODE 
    ///////////////////////////////////////////////////////////////////////////////
    void code (void)
    {
       codage=0;
       codage=input_d();                              // permet de detectée le codage 
    }
    
    ///////////////////////////////////////////////////////////////////////////////
    //        programme principle                                                //
    ///////////////////////////////////////////////////////////////////////////////
    
    void main()
    {
    
       setup_adc_ports(NO_ANALOGS|VSS_VDD);
       setup_adc(ADC_OFF);
       setup_psp(PSP_DISABLED);
       setup_spi(FALSE);
       setup_wdt(WDT_OFF);
       setup_timer_0(RTCC_INTERNAL);
       setup_timer_1(T1_DISABLED);
       setup_timer_2(T2_DISABLED,0,1);
       setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
       setup_comparator(NC_NC_NC_NC);
       setup_vref(FALSE);
       enable_interrupts(INT_RDA);
       enable_interrupts(GLOBAL);
       setup_oscillator(False);
    	setup_uart(TRUE);
    
       
       set_tris_d(0b11111111);
    
    while (1)
       {
    
       
       code();
       }
    }

    -----
    Dernière modification par JPL ; 02/01/2011 à 17h42. Motif: Ajout de la balise Code (#)

  2. Publicité
  3. #2
    JPL

    Re : Langage c interruption sur uart

    Si la question est essentiellement une question de programmation elle a sa place ici, mais si le problème réside dans des particularités des PIC, sa place serait mieux en Électronique où il est possible de la déplacer.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  4. #3
    dodge256

    Re : Langage c interruption sur uart

    Bonjour
    Pourriez vous me dire comment déplacer le sujet en section électronique ?
    Merci

  5. #4
    yoda1234

    Re : Langage c interruption sur uart

    Discussion déplacée vers un forum plus approprié.
    Citation Envoyé par dodge256 Voir le message
    Pourriez vous me dire comment déplacer le sujet en section électronique ?
    Seuls les modérateurs peuvent le faire.
    Là où l'ignorance est un bienfait, c'est de la folie d'être sage (Thomas Gray).

  6. #5
    HULK28

    Re : Langage c interruption sur uart

    Bonjour,

    je ne connais pas CCS mais je trouve curieux que ta variable codage ou lecture ne soit pas déclaré en "volatile".
    Je ne vois pas non plus de flags réinitialisés, c'est peut-être normal avec ce type de compilateur.
    Egalement je trouve curieux de rencontrer des fonctions à traiter dans la gestion des interruptions...

    Pour tout dire cette manière de faire et d'écrire est assez opaque et très triviale ce qui n'est pas le but en C pour la portabilité par exemple qui est impossible avec ce type de compilateur...
    Le génie est fait d'un pour cent d'inspiration et de 99% pour cent de transpiration.

  7. A voir en vidéo sur Futura

Sur le même thème :

Discussions similaires

  1. Utiliser 2 UART sur 18F97J60
    Par lcoulon dans le forum Électronique
    Réponses: 1
    Dernier message: 05/06/2010, 17h17
  2. Emetteur/recepteur IR sur port UART
    Par Rancis dans le forum Électronique
    Réponses: 9
    Dernier message: 12/01/2010, 12h32
  3. Programme sur un 16F628 (UART)
    Par satora dans le forum Électronique
    Réponses: 0
    Dernier message: 07/04/2008, 21h47
  4. Interruption sur PIC18F252 en langage C
    Par induc dans le forum Électronique
    Réponses: 1
    Dernier message: 18/05/2006, 10h24
  5. Possibilité d'avoir 2 UART sur un PIC ??
    Par fun_olivier dans le forum Électronique
    Réponses: 4
    Dernier message: 24/01/2006, 21h18