Langage C : donner un nom à un PORT
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Langage C : donner un nom à un PORT



  1. #1
    invite3570b5f7

    Langage C : donner un nom à un PORT


    ------

    Bonsoir et joyeux Noël tout le monde !

    J'ai fini un programme et je suis entrain de lui donner une belle gueule.

    Surtout de l'ordre dans mes variables ainsi que des noms.

    Bon, par contre je voudrais donner un nom à un port et il me semble que c'est possible en écrivant " define ......... "

    Par exemple sur mon PORTD j'ai 8 LEDs et comme je fais appel souvent au PORTD, je préfèrerais écrire LED = 0xD5 par exemple.

    De même, j'ai un buzzer sur PORTC.2 ...

    Voilà merci à vous

    -----

  2. #2
    marc2009

    Re : Langage C : donner un nom à un PORT

    Code:
    #define LED PORTD
    #define buzzer PORTC.2
    ? =p

    Si je me trompe pas

  3. #3
    RISC

    Re : Langage C : donner un nom à un PORT

    Salut,

    Regarde les tutoriels sur le langage C sur internet. Il y en a de très bons ;=)

    Pour les #define tu peux essayer cela :

    #define BUZZER PORTC.2

    Le #define correspond a de la substitution de chaines de caractères AVANT la compilation. Pour l'exemple au dessus, partout ou tu as écris BUZZER, il remplacera par PORTC.2

    Le programme est bien sûr plus lisible avec BUZZER = 1; ou BUZZER = 0;

    NB : pour ce genre de questions précise le compilateur avec lequel tu travailles. Chaque compilo a ses particularités pour la gestion des PORTS...

    De plus, n'oublie pas que s'il s'agit d'un PIC18 / PIC24 ou PIC32, il faut utiliser LATA plutôt que PORTA pour les broches en SORTIE.
    La raison de cela se trouve dans la datasheet ou dans les dizaines de sujets qui traitent de ce sujet.

    a+

  4. #4
    invite3570b5f7

    Re : Langage C : donner un nom à un PORT

    Ahhh voilà !! Merci beaucoup

    Ca fait bien plus propres maintenant

    Voici un morceau de mes sous programmes :

    Code:
     void RELAIS_ON (void)         // Activation des relais
        {
        X = 0x80;
        for ( i=0; i<RC; i++ )
                {
                RELAIS_PR = X;
                LED_PR = X;
                A = X >> 1;
                X = X | A;
                delay_ms(1000);
                }          
        };
            
    
    
                                  // Désactivation des relais
    void RELAIS_OFF (void)
        {
        for ( i=0; i<=RC; i++ )
                {
                A = X << 1;
                X = X & A; 
                RELAIS_PR = X;
                LED_PR = X;
                delay_ms(1000);
                } 
        };

    Quand je rentre en premier dans le SP d'activation tout ce passe bien car la première chose qu'il fait c'est d activer le premier relais.
    Par contre quand je rentre dans le deuxième de désactivation, il fait une fois la boucle " dans le vent " et du coup à la place d'avoir une tempo d'une seconde, j'ai 2 secondes...

    J'aurais bien initialiser la variable X comme point de départ mais je ne peux pas car RC me donne un nombre de 0 à 8.

    Si RC = 4, les 4 relais s'activent avec tempo, et pour la désactivation il faut que ca parte du quatrième pour arriver au 1.

    A moins de trouver la solution genre X = X - RC ...

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

    Re : Langage C : donner un nom à un PORT

    Citation Envoyé par RISC Voir le message
    De plus, n'oublie pas que s'il s'agit d'un PIC18 / PIC24 ou PIC32, il faut utiliser LATA plutôt que PORTA pour les broches en SORTIE.
    Et non, notre ami travaille sur AVR....

    @ Joey57

    Dans la fonction d'activation, comme tu fais ton affectation de port et tes calculs ensuite, tu as au final comme valeur de X 0x11111000.

    C'est normal que ta fonction de désactivation fasse un tour dans le vide.

    Pour bien faire, tu devrais travailler directement sur les valeurs des ports, plutôt que de passer par des variables.

    Code:
    void RELAIS_ON(void)
    {
    RELAIS_PR=0x80;
    LED_PR=0x80;
        for ( i=0; i<=RC; i++ )
         {
          delay_ms(1000);
          RELAIS_PR>>=1;
          RELAIS_PR|=0x80;
          LED_PR=RELAIS_PR;
    
         }    
    }
     void RELAIS_OFF (void)
        {
    
        for ( i=0; i<=RC; i++ )
                {
               RELAIS_PR<<=1;
               LED_PR<<=1;
                delay_ms(1000);
                } 
        };
    Ca parait plus simple, non?

    Attention à l'utilisation des fonctions de delay. Ce ne sont que de simples boucles dont le nombre d'itérations est basé sur le temps de cycle du micro. Donc si ta boucle est fréquemment interrompue (par des interruptions, au hasard), ton délai sera augmenté du temps d'exécution de ces interruptions.

  7. #6
    Short

    Re : Langage C : donner un nom à un PORT

    Il n'y a pas un moyen d'interdire les interruptions durant le temps de bouclage de la fonction delay?
    UTC- Génie Mécanique

  8. #7
    ftorama

    Re : Langage C : donner un nom à un PORT

    Citation Envoyé par Short Voir le message
    Il n'y a pas un moyen d'interdire les interruptions durant le temps de bouclage de la fonction delay?
    Si bien sur, mais c'est un peu idiot. Si tu commences à donner la priorité aux délais par rapport aux interruptions, ça va à l'encontre de toute logique....

    Mais bon, les GM n'ont jamais été réputés pour leurs talents en programmation (c'est un ex-GI qui parle )

Discussions similaires

  1. Changer le nom d'un port com
    Par oldy1 dans le forum Matériel - Hardware
    Réponses: 11
    Dernier message: 09/08/2010, 17h32
  2. Donner son nom
    Par mika2906 dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 2
    Dernier message: 21/02/2010, 22h19
  3. Jeux : donner un nom au materiel.
    Par sebotor dans le forum Chimie
    Réponses: 5
    Dernier message: 14/04/2009, 13h58
  4. Qui peut me donner le nom scientifique de cette araignée ?
    Par invite0d68ebf6 dans le forum Identification des espèces animales ou végétales
    Réponses: 8
    Dernier message: 11/10/2007, 21h29
  5. [Identification] qui peut me donner le nom de cet arbre ?
    Par agnesl_58 dans le forum Biologie
    Réponses: 3
    Dernier message: 03/08/2007, 11h54
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...