Langage c interruption sur uart
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Langage c interruption sur uart



  1. #1
    invitebe17e9d1

    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. #2
    JPL
    Responsable des forums

    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

  3. #3
    invitebe17e9d1

    Re : Langage c interruption sur uart

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

  4. #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).

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

    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...

Discussions similaires

  1. Utiliser 2 UART sur 18F97J60
    Par invitedd558ae9 dans le forum Électronique
    Réponses: 1
    Dernier message: 05/06/2010, 17h17
  2. Emetteur/recepteur IR sur port UART
    Par invite47b8938b dans le forum Électronique
    Réponses: 9
    Dernier message: 12/01/2010, 12h32
  3. Programme sur un 16F628 (UART)
    Par invite103abebb dans le forum Électronique
    Réponses: 0
    Dernier message: 07/04/2008, 21h47
  4. Interruption sur PIC18F252 en langage C
    Par invite23732d21 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
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...