Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:



+ Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 15 sur 25

C pour PIC : récupérer le nième bit d'un entier

  1. Toufinet

    Date d'inscription
    mars 2006
    Âge
    28
    Messages
    1 177

    C pour PIC : récupérer le nième bit d'un entier

    Bonjour à tous.

    Bon, bah j'ai finalement décidé de me mettre au C pour PIC avec CC5X !

    Premier blocage. J'ai un unsigned int ( de 8 bits donc ), et je souhaiterai pouvoir accéder au nième bit.

    J'ai essayé :
    unsigned int truc;

    PORTA.0 = truc.0;

    mais ça ne passe pas, il refuse le point après "truc".
    J'ai fouillé un peu le net, mais pas plus trouvé que ça ... pouvez-vous me donner une piste svp ?

    Merki
     


    • Publicité



  2. Toufinet

    Date d'inscription
    mars 2006
    Âge
    28
    Messages
    1 177

    Re : C pour PIC : récupérer le nième bit d'un entier

    Ma question est mal posée ?
    Y'a quelque chose de compliqué ?

    Ne me forcez pas à retourner en ASM !!
     

  3. invite76a

    Date d'inscription
    août 2005
    Localisation
    Belgique
    Messages
    0

    Re : C pour PIC : récupérer le nième bit d'un entier

    Bonsoir, Toufinet

    Ta question est très bien posée et est très claire.

    Le langage C permet cela sachant que :
    - Une structure permet d'associer des variables de différents types
    - Une variable peut être déclarée avec une taille spécifiée en nombre de bits
    - une union est composée de variables occupant le même espace mémoire

    Voici comment faire (je suppose que le C de microchippe est ANSII) :
    http://www.68hc08.net/modules/newbb/...id=146&forum=6

    thierry

    PS: ma référence préférée : http://tamoggemon.com/blog/contents/...hell/front.jpg
    Dernière modification par invite76a ; 14/10/2007 à 22h03. Motif: ortografe
     

  4. RISC

    Date d'inscription
    novembre 2006
    Messages
    2 881

    Re : C pour PIC : récupérer le nième bit d'un entier

    Salut,

    Pour pouvoir faire cela, il faut que des structures à champs de bits aient été définies dans un fichier header.

    Sur les compilateurs Microchip C18 et C30, toutes les déclarations sont faites dans les fichiers header pour chaque micro. Tu peux télécharger ces compilateurs ou chercher un fichier header sur internet dans un projet

    Regarde sur CC5x ce qui existe comme fichier header ou fabrique toi ces structures en recopiant celles du compilateur C18.

    a+
     

  5. invite76a

    Date d'inscription
    août 2005
    Localisation
    Belgique
    Messages
    0

    Re : C pour PIC : récupérer le nième bit d'un entier

    Citation Envoyé par RISC Voir le message
    Salut,

    Pour pouvoir faire cela, il faut que des structures à champs de bits aient été définies dans un fichier header.

    a+
    Certainement pas, si ce n'est pas déclaré dans un fichier header, il y a toujours moyen de faire cette manipulation pour n'importe quelle variable en utilsant la syntaxe standard du C.

    Mais c'est effectivement le genre de déclaration que l'on trouve pour les ports d'E/S dans les fichiers header.

    th
    Dernière modification par invite76a ; 14/10/2007 à 22h24.
     


    • Publicité



  6. Seb.26

    Date d'inscription
    juin 2005
    Âge
    36
    Messages
    1 749

    Re : C pour PIC : récupérer le nième bit d'un entier

    Bonsoir, alors premièrement : le type int est à utiliser avec precaution, en effet, c'est un type qui varie selon la cible ...

    Sur PIC, tu dis que c'est un 8b, mais sur intel, c'est un 32b ... docn il faut preferer systematiquement les type figés ( char, short et long )

    Ensuite, pour obtenir un bit, il est preferable de declarer ta variable comme union d'un champ de bit et d'un unsigned char, comme cela, tu peux utiliser ta variable comme un uchar ou comme un groupe de bits.

     

  7. mictour

    Date d'inscription
    septembre 2005
    Localisation
    touraine
    Messages
    136

    Re : C pour PIC : récupérer le nième bit d'un entier

    Bonjour Toufinet,
    CC5X ne suit pas la norme AINSI notamment pour les variables :

    uns8 u8; // 8 bit unsigned
    uns16 u16; // 16 bit unsigned
    uns24 u24; // 24 bit unsigned
    uns32 u32; // 32 bit unsigned
    int8 s8; // 8 bit signed
    int16 s16; // 16 bit signed
    int24 s24; // 24 bit signed
    int32 s32; // 32 bit signed

    unsigned a8; // 8 bit unsigned
    char a8; // 8 bit unsigned

    Ce petit extrait que je viens de tester dans un programme "passe"

    char i;

    …………

    void main(void)
    {
    init();
    do
    {
    PORTA.2 = n.2;
    ……..

    Bonne prog, mictour.
     

  8. mictour

    Date d'inscription
    septembre 2005
    Localisation
    touraine
    Messages
    136

    Re : C pour PIC : récupérer le nième bit d'un entier

    .... Re
    Une erreur d'inattention (copier coller !) il faut lire :
    char n; et non char i; .... mais je pense que tu avais rectifié.
    mictour.
     

  9. Toufinet

    Date d'inscription
    mars 2006
    Âge
    28
    Messages
    1 177

    Re : C pour PIC : récupérer le nième bit d'un entier

    Bonjour à tous,

    Merci pour vos réponses, mais une des informations de mon problème ne semble pas être passée. Je veux pouvoir accéder au i-ième bit de ma variable.

    Exemple ( non fonctionnel ) :
    unsigned int i;
    char variable;

    for (i=0; i<8; i++) {
    PORTA.0 = variable.i;
    }

    De la même manière, comment parcourir un port ( PORTA.i ) ?

    C'est vraiment casse-pied, car en assembleur, ça se fait très facilement !
     

  10. Jack

    Date d'inscription
    avril 2003
    Localisation
    Metz
    Messages
    12 231

    Re : C pour PIC : récupérer le nième bit d'un entier

    Il te suffit d'écrire une fonction ou une macro. Il faudra utiliser les décalages et les masques à l'aide ET et de OU pour forcer un bit à 0 ou à 1.

    En fait c'est pareil qu'en assembleur.

    Exemple: tu veux mettre à 1 le bit n de data: ton masque vaut 0b00000001 au départ et tu vas le décaler n fois à gauche et faire un OU avec ta donnée.

    data |= 0x01 << n;

    A+
     

  11. mictour

    Date d'inscription
    septembre 2005
    Localisation
    touraine
    Messages
    136

    Re : C pour PIC : récupérer le nième bit d'un entier

    CC5X n'aime pas l'ecriture indexée : variable.i Mais ceci devrait passer (pas testé),
    lecture fixe + décalage du registre, comme Jack te l'indiques.

    for (i=0; i<8; i++)
    {
    PORTA.0 = variable.0;
    variable >>1;
    }
    mictour
     

  12. Toufinet

    Date d'inscription
    mars 2006
    Âge
    28
    Messages
    1 177

    Re : C pour PIC : récupérer le nième bit d'un entier

    Super , ça marche impec !

    Sauf que lorsque je simule, la valeur de PORTA ne change pas ... mais ça c'est un autre problème
     

  13. Benoit_ofr

    Date d'inscription
    mai 2008
    Âge
    28
    Messages
    6

    Re : C pour PIC : récupérer le nième bit d'un entier

    Bonjour,

    Je me permet de réouvrir la discussion car j'ai un problème similaire mais dont la solution n'est pas encore donnée ici.

    Je cherche également à accéder au nième bit d'une variable mais également de lui donner un nom pour améliorer la lisibilité du code.

    Par exemple je déclare une variable PORTBBuf :
    unsigned char PORTBBuf

    Puis je défini un nom pour le bit 0
    #define RB0Buf PORTBBuf,0

    Cette solution fonctionne si je viens lire RB0Buf dans mon programme mais j'ai une erreur de compilation lorsque je veux écrire RB0Buf.

    Quelqu'un aurait il une solution pour avoir une variable pointant sur le bit d'une autre et pouvoir utiliser cette variable en lecture et en écriture??

    Merci d'avance.
    Benoit
     

  14. Benoit_ofr

    Date d'inscription
    mai 2008
    Âge
    28
    Messages
    6

    Re : C pour PIC : récupérer le nième bit d'un entier

    Pour être plus précis je travaille avec HITECH compiler sur MPLAB
     

  15. Tix

    Date d'inscription
    octobre 2004
    Localisation
    france
    Messages
    1 515

    Re : C pour PIC : récupérer le nième bit d'un entier

    Salutation
    bitn =( octet AND 2^n )/ 2^n

    si je ne m'abuses. sinon, tu peus aussi remplacer le /2^n par des décallages à droite ">>" ou à gauche "<<"

    si tu est moins exigent et qu'un seul bit de l'octet te suffit :

    int bitn(char octet, int pos)
    {
    if(octet AND 2^pos)
    {
    return 1;
    }
    else
    {
    return 0;
    }
    }

    si je ne m'abuse, bien évidemment...
    désolé, mauvaise appréciation de la question =)

    Benoit_ofr, un define est un préprocesseur, autrement dit, toutes les entités définies sont remplacée avant compilation, ce ne sont pas des variables !
    don tu ne peu pas modifier un define, il faut trouver autre chose.

    plusplus, Tix.
    Dernière modification par Tix ; 19/01/2009 à 18h31.
     


    • Publicité




Poursuivez votre recherche :




Sur le même thème :




 

Discussions similaires

  1. Réponses: 38
    Dernier message: 02/05/2012, 10h43
  2. Compilateur CCS C - initialiser struct bit à bit ?
    Par branqueira dans le forum Électronique
    Réponses: 4
    Dernier message: 26/11/2007, 14h37
  3. TS arithmétique nombre de diviseurs positifs d'un entier
    Par raptor77 dans le forum Mathématiques du collège et du lycée
    Réponses: 14
    Dernier message: 11/11/2007, 08h56
  4. Un organisme entier né d'un fragment de vaisseau sanguin
    Par RSSBot dans le forum Commentez les actus, dossiers et définitions
    Réponses: 2
    Dernier message: 19/03/2007, 10h42
  5. Choix d'un PIC pour projet robotique
    Par Pierrick dans le forum Électronique
    Réponses: 7
    Dernier message: 22/01/2004, 21h18


Les tags pour cette discussion