Interruptions pour PIC sous CC5X
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Interruptions pour PIC sous CC5X



  1. #1
    invite6f219821

    Exclamation Interruptions pour PIC sous CC5X


    ------

    Bonsoir,

    Voila je programme les PIC en C sous CC5X. J'essaye d'utiliser les interruptions.Je voudrai, dans mon interruption, utiliser une fonction qui est créée avant dans le programme (ici il s'agirait d'un delay utilisant le TIMER du PIC).
    Mais il semble que l'interruption doit toujours être écrite en première, donc lorsque CC5X compile il n'y arrive pas car la fonction delay est après !!
    Et si je la met avant il n'arrive plus à compiler l'interruption. Il me dit que l'erreur est à la ligne :
    Code:
    pragma origin 4
    C'est elle qui permet au compilateur de placer l'interruption à l'adresse 0X4.

    Il y a un moyen de contourner ce problème ?
    Merci d'avance Floc

    -----

  2. #2
    mictour

    Re : Interruptions pour PIC sous CC5X

    Bonjour SpeedYFloK,

    Il suffit que tu "annonces" tes routines en tête de ton programme.
    Un petit exemple ?

    #pragma chip PIC16F877
    #pragma config |= 0x3F71
    #include "int16CXX.h"

    uns8 Zn, Dta, Krd, Tad;

    void delayms(uns8 ms);
    void initad (void);
    void ad (char No);
    void initlcd(void);
    void initpic (void);

    #pragma origin 4
    interrupt intr(void)
    {
    int_save_registers // + autres si necessaire (option, FSR...)

    Etc...

    Bonne soirée, mictour.

  3. #3
    invite6f219821

    Re : Interruptions pour PIC sous CC5X

    Bonjour,
    Merci pour cette réponse mictour en effet ça marche maintenant !
    Mais je voudrai utiliser l'interruption sur la patte RB0/INT d'un 16F84A, j'écris mon programme, CC5X me le compile sans problème mais une fois sur la platine d'essai rien ne se passe. Pourquoi ? Je n'en ai aucune idée.

    Le code :
    Code:
    #include "int16CXX.H"
    
    static void tempo (void);
    
    #pragma origin 4
    
    interrupt interruption (void)
    {
        int_save_registers    
    		if (INTF==1){PORTB=0b00011000; tempo();INTF=0;}
    	int_restore_registers 
    }
    
    void delay(char m)		//Fonction delay qui dure m * 100 µs
    						// Avec un quartz de 4 MHz 
    {
    OPTION = 0b01000000;	// prescaler sur 0 mais bit INTEDG à 1 pour valider 
    						//les fronts montants comme source d'interruption.
    do {
    TMR0 = 0;
    while (TMR0 < 100) 
    ;
    } while (-- m > 0);
    }
    
    static void tempo (void)
    {
         delay(100);
    }
    
    
     void main (void)
    {
    	INTCON = 0b10010000;	//bits GIE et INTE à 1 pour utiliser l'interruption sur RBO
    	OPTION = 0b01000000;	
    	TRISB = 0b00000001;
    	PORTB = 0;
    }
    Pour provoquer cette interruption je relie la patte RB0/INT de mon pic à l'alimentation +5V.

    FloC

  4. #4
    mictour

    Re : Interruptions pour PIC sous CC5X

    Joyeux noêl à toutes et à tous,
    Ici et là, j'ai modifié ton programme, il devrait tourner mais ... je n'aime pas ta routine d'interruption !
    Static ne sert à rien avec CC5X au moins en version 'eval'.

    #pragma chip PIC16F84
    #pragma config |= 0x3ff1 // Attention au toutou !
    #include "int16CXX.h"
    void tempo (void);

    #pragma origin 4
    interrupt intr(void) // ..
    {
    int_save_registers // + autres si necessaire (option, FSR...)

    // if (T0IF && T0IE) ...
    if (INTF==1){PORTB=0b00011000; tempo();INTF=0;}
    int_restore_registers
    }

    void delay(char m) //Fonction delay qui dure m * 100 µs
    // Avec un quartz de 4 MHz
    {
    OPTION = 0b11000000; // prescaler sur 0 mais bit INTEDG à 1 pour valider
    //les fronts montants comme source d'interruption.
    // Bit "7" à 1 !
    do
    {
    TMR0 = 0;
    while (TMR0 < 100);
    } while (-- m > 0);
    }

    static void tempo (void)
    {
    delay(100);
    }


    void main (void)
    {
    INTCON = 0b10010000; //bits GIE et INTE à 1 pour utiliser l'interruption sur RBO
    OPTION = 0b11000000;
    TRISB = 0b00000001;
    PORTB = 0;
    // Fin des inits et debut du programme principal !

    while(1) // boucle principale sinon on se ballade ..
    {
    nop();
    }
    }

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

    Re : Interruptions pour PIC sous CC5X

    Bonjour,

    Merci beaucoup mictour !!
    Sa marche parfaitement maintenant, juste une précision ?

    La ligne:
    Code:
    #pragma chip PIC16F84A
    est elle indispensable ?

    Il semblerait que mon erreur venait du fait que j'ai mis le bit 7 à 0 dans le registre OPTION!

    Merci encore !
    A+

  7. #6
    mictour

    Re : Interruptions pour PIC sous CC5X

    Bonjour SpeedYFloK,
    Le code :

    #pragma chip PIC16F84A

    sert au compilateur, entre autre, à connaître sa ‘cible’ et donc à configurer les registres, adapter le programme…
    Attention au registre OPTION : Je remarque que tu le défini deux fois. Ici ça passe puis que c’est la même valeur sinon il faut faire une sauvegarde.
    ……
    Temp = OPTION ;
    OPTION = xx ; / nouvelle valeur
    // code …
    OPTION = temp ; / on sort comme on est entré !

    Le bit7 définit le sens de l’interruption (front montant ou descendant)
    A bientôt, mictour.

  8. #7
    invite6f219821

    Re : Interruptions pour PIC sous CC5X

    Bonjour !

    Merci pour toutes ces précisions mictour ! Et ton aide !
    Merci beaucoup.

    FloK

  9. #8
    mictour

    Re : Interruptions pour PIC sous CC5X

    Bonjour SpeedYFloK,

    Attention !!

    Le bit7 définit le sens de l’interruption (front montant ou descendant)

    … Sauf que je t’ai « enduit d’erreur » en me trompant de bit !!

    Le sens de l’interruption est défini par le bit6, le bit7 commande les Pull-up.
    Bit7 = 0, active les pull-up et donc les entrées du PORTB sont à « 1 », d’où ton problème.
    Avec toutes mes excuses, et bon dimanche quand même.
    mictour.

  10. #9
    invite6f219821

    Re : Interruptions pour PIC sous CC5X

    Bonjour,

    Ah exa !!
    Merci beaucoup mictour pour ta patiente et ton explication bonus!

    A+
    FloK

Discussions similaires

  1. PIC sous CC5X, Programmation avec DS1302
    Par invite5b0b28b7 dans le forum Électronique
    Réponses: 3
    Dernier message: 18/09/2008, 15h11
  2. PIC interruptions simultanées
    Par invite85bfc8b3 dans le forum Électronique
    Réponses: 4
    Dernier message: 16/06/2008, 12h45
  3. Interruption avec CC5x (Pour pic)
    Par joseph4008 dans le forum Électronique
    Réponses: 4
    Dernier message: 28/09/2005, 18h07
  4. interruptions PIC 18F452
    Par invite86ad2abe dans le forum Électronique
    Réponses: 3
    Dernier message: 09/03/2005, 19h37
  5. interruptions portB PIC
    Par romelec dans le forum Électronique
    Réponses: 6
    Dernier message: 02/05/2004, 10h12
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...