Petit problème en langage C. Please Help!
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Petit problème en langage C. Please Help!



  1. #1
    invite00a39544

    Petit problème en langage C. Please Help!


    ------

    Bonjour.
    Je rencontre un petit problème de langage C, pour lequel j'aurai besoin d'un peu d'aide.
    En effet, en ce moment je réalise un programme en langage C sur un microcontrôleur PIC (18F452)
    Dans se programme j'ai besoin d'une sortie numérique sur 10 bits.
    Ces sortie bits de sortie numérique sont répartis sur 2 ports 8 bits du microcontrôleur puis rediriger sur des ports d'un kit de développement.
    Voici comment est organisé ma sortie:

    RB0 LSB
    RB1
    RB2
    RB3
    RB4
    RB5
    RD4
    RD5
    RD6
    RD7 MSB

    Les bits de ces ports non représentés ici (RB6, RB7 et de RD0 à RD3) sont utilisés pour des contrôles sur un afficheur et autres)
    Mon problème est le suivant : si je veux intervenir sur cette sortie numérique de 10 bits, comment mettre seulement les bits qui m'intéresse dans le bon état ?? Je ne sais pas trop comment m'y prendre..
    Par exemple , si je veux placer la valeur décimal 955 sur ma sortie numérique comment faire ?
    Dans mon programme en C, aprs qlq calculs, j'ai:

    Sortie numérique = 955;

    Puis je dois mettre à jours mes ports de sorties.Je dois donc répartir la valeur binaire 1110111011 sur les ports B et D et sans toucher aux bits de contrôles qui gère mon afficheur?

    Merci d'avance pour votre aide!

    -----

  2. #2
    jiherve

    Re : Petit problème en langage C. Please Help!

    Bonjour
    étrange que de vouloir placer 10bits sur seulement 8 !
    Pour le fond il me semble que si tu déclares une structure cela devrait aller, attention cependant s'il y a des interruption qui accèdent au mêmes ports.
    http://www.commentcamarche.net/c/cstruct.php3

    JR

  3. #3
    invite57a1fa50

    Lightbulb Re : Petit problème en langage C. Please Help!

    Je n'ai pas trop compris l'intérêt de la structure pour faire ça. Je te propose une autre méthode (qui est peut-être liée je ne sais pas).

    Pour cela il va te falloir utiliser des masques et des décalages de bits. On peut procéder comme suit :

    Code:
    #define MASK_PORTB b00111111
    #define MASK_PORTD b11110000
    #define SHIFT_PORTD 2 //décalage pour aligner la numérotation des bits dans la valeur à afficher et dans le port D
    
    void printValue(unsigned int value) {
    char tempPort;
    
    //Partie pour le port B
    tempPort= portb;
    tempPort = tempPort & !MASK_PORTB; //sauvegarde des bits que l'on ne veut pas toucher
    tempPort = tempPort | (value & MASK_PORTB); //ajout des bits que l'on souhaite modifier
    portb = tempPort;
    
    //Partie pour le port D
    tempPort = portd
    tempPort = tempPort & !MASK_PORTD //sauvegarde des bits à ne pas toucher
    tempPort = tempPort | ((value >> SHIFT_PORTD) & MASK_PORTD); //ajout des bits à modifier en ayant pris la peine de les aligner
    portd = tempPort;
    }
    Je ne suis pas sûr que le code marche du premier coup mais l'idée est là.

    Monsieur Poney

  4. #4
    jiherve

    Re : Petit problème en langage C. Please Help!

    Re
    La structure permet d'obtenir le même résultat mais de façon transparente, le compilateur, s'il est bon, se charge du boulot de base.
    Attention cependant dans certain cas il faut déclarer la variable associée à la structure comme étant "volatile" pour qu'une opération de read modify write ayant pour objet le registre physique soit effectivement implémentée.
    La méthode de Mr Poney fait exactement la même chose mais de façon explicite!
    JR

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

    Re : Petit problème en langage C. Please Help!

    merci bcp, je pense qu'avec ça , mon problème va disparaitre!
    merci encore

Discussions similaires

  1. problème avec langage C++
    Par invite0f6e0be6 dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 03/10/2007, 12h20
  2. Problème Langage C Structure, Pointeur, ...
    Par invite3e43df7f dans le forum Logiciel - Software - Open Source
    Réponses: 17
    Dernier message: 01/04/2006, 21h14
  3. Problème Langage C Sorte de Boucle
    Par invite3e43df7f dans le forum Logiciel - Software - Open Source
    Réponses: 19
    Dernier message: 18/01/2006, 21h17
  4. Problème en langage VBA
    Par invite588da7a7 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 09/07/2004, 14h00
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...