Union et Struture [Forums - Langage C]
Union et Struture [Forums - Langage C]
Pseudo Pass se souvenir de moi     Créer un compte
ARTICLES et TELECHARGEMENTS ~ FORUMS ~ LIENS  
 
             
 
Recherche
 
   
 

Parcourir ce sujet :   1 Utilisateur(s) anonymes





Union et Struture
Semi pro
Inscrit:
11/12/2008 21:00
Messages: 78
Hors Ligne
Salut a tous,

je suis en train de reprendre ma librairie LCD que j'utilise depuis pas mal de temps mais je voudrais l'ameliorer car il y a quand meme des trucs a revoir!

j'ai entrepris d'utiliser pour la premiere fois l'UNION et le champs de bit afin de pouvoir plus facilement configurer mon LCD justement

j'ai lu pas mal d'exemples et de sujets sur le net et j'ai fini par ecrire ce bout de code, pourriez vous me dire si ce que j'ai ecris est bon, car j'ai ecris cela avec ce que j'ai compris en lisant ce que j'ai trouvé sur le sujet

typedef union {
unsigned char Port_LCD;
struct {
byte bit0 :1;
byte bit1 :1;
byte bit2 :1;
byte bit3 :1;
byte bit4 :1;
byte bit5 :1;
byte bit6 :1;
byte bit7 :1;
} LCD_Bits;
} LCD;

/*************************************
* utilisation de l'union de structure
* LCD.Port_LCD = 0; les 8 bits sont mis a zero
* LCD.Port_LCD = 1; les 8 bits sont mis a un
* LCD.LCD_Bits.bit0 = 1 le bit 0 est placé a 1 sans toucher aux autres
* LCD.LCD_Bits.bit5 = 0 le bit 5 est placé a 0 sans toucher aux autres
*/

j'espere franchement que vous allez me dire que c'est bon car vu le temps que j'ai passé a ecrire ce bout de code je serais fou

merci

Pat

Posté le : 05/03 15:17
Transférer la contribution vers d'autres applications Transférer


Re: Union et Struture
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1896
Hors Ligne
Salut

Si ce n'est pas bon tu ne dois pas être loin du but, à vue de nez ça sonne juste pour moi.

juste sur l'utilisation
Citation :
LCD.Port_LCD = 1; les 8 bits sont mis a un
c'est faux ca
ça mettra à 1 que le bit 0
LCD.Port_LCD = 0xFF; //mise à 1 des 8 bits


Posté le : 05/03 15:23
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
Transférer la contribution vers d'autres applications Transférer


Re: Union et Struture
Semi pro
Inscrit:
11/12/2008 21:00
Messages: 78
Hors Ligne
Salut,Charly

bon tu vois j'ai pas tout compris car je croyais que Port_LCD regroupait les 8 bits de ma structure et que c'etait LCD_Bits qui permetais d'affectuer tel ou tel bit a la valeur choisie

le bout de code ecris plus haut je l'ai placé dans mon .h
et j'ai ecris LCD.Port_LCD = 1; dans mon .C
j'ai essayé avec LCD.Port_LCD = 0xFF; comme tu m'a dis

et le compilateur n'en veut pas il me sort une erreur "declarator expected"

j'ai meme trouvé un bon exemple sur le forum

http://www.68hc08.net/modules/newbb/v ... bea5e6b7a9f124d154030017a


suis degouté je croyais avoir tout compris

Pat


Posté le : 05/03 15:46
Transférer la contribution vers d'autres applications Transférer


Re: Union et Struture
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1896
Hors Ligne
Là tu n'as pas déclaré un variable mais un type de variable (typedef...)

Il faut donc déclarer une variable de ce nouveau type puis l'utiliser

typedef union {
unsigned char Port_LCD;
struct {
byte bit0 :1;
byte bit1 :1;
byte bit2 :1;
byte bit3 :1;
byte bit4 :1;
byte bit5 :1;
byte bit6 :1;
byte bit7 :1;
LCD_Bits;
LCD_type///j'ai fait un petit changement ici

LCD_type TaVariable  ;

TaVariable.Port_LCD 0x1 //je mets le bit0 à 1
TaVariable.LCD_Bits.bit0 // je la remets à 0

La structure de bit décrit un octet bit par bit
l'union affecte soit la structure, soit l'octet à la même variable, au même emplacement.
PS : en espérant utiliser les bons termes, je suis mécano à la base...







Posté le : 05/03 17:16
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
Transférer la contribution vers d'autres applications Transférer


Re: Union et Struture
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1896
Hors Ligne
Si jamais ce n’était pas une évidence pour toi, tu peux écrire ça si tu veux aussi :

typedef union {
unsigned char Port_LCD;
struct {
byte led_verte :1;
byte relais1 :1;
byte CommandePrise :1;
byte bit3 :1;
byte toto :1;
byte tutu :1;
byte bit6 :1;
byte bit7 :1;
} LCD_Bits;
} LCD_type;

Posté le : 05/03 17:19
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
Transférer la contribution vers d'autres applications Transférer


Re: Union et Struture
Semi pro
Inscrit:
11/12/2008 21:00
Messages: 78
Hors Ligne
Salut, Charly

voici ce que j'ai ecris
typedef union {
unsigned char Port_LCD;
struct {
byte bit0 :1;
byte bit1 :1;
byte bit2 :1;
byte bit3 :1;
byte bit4 :1;
byte bit5 :1;
byte bit6 :1;
byte bit7 :1;
} Bits;
} LCD_type;

LCD_type LCD ;

void Config (void)
{
LCD.Bits.bit3=1;
PTCD = LCD.Bits.bit3;

}

et voila se qui ce passe

si j'ai bien compris, avec mon code, je mets le bit 3 de ma structure a 1 et apres je recopie ce meme bit sur le port C donc la led qui est connectée devrait s'allumée mais helas non

seul la led connectée sur PTCD0 s'allume

j'ai bien configuré le PTCDD en sortie pour le port C

j'ai loupé quoi tu peu m'aider ?

merci

Pat



Posté le : 05/03 21:10
Transférer la contribution vers d'autres applications Transférer


Re: Union et Struture
Semi pro
Inscrit:
11/12/2008 21:00
Messages: 78
Hors Ligne
Salut,

c'est bon j'ai compris mon erreur

mais alors cela ammene a une autre question

est-il possible de changer par exemple le bit 0, le bit4, le bit 6

et envoyer le tout sur le port C par exemple en une seule fois

merci ca avance doucement

Pat

Posté le : 05/03 21:17
Transférer la contribution vers d'autres applications Transférer


Re: Union et Struture
Semi pro
Inscrit:
11/12/2008 21:00
Messages: 78
Hors Ligne
Salut,

bon c'est bon j'y suis arrivé, mais je suppose que je vais encore poser des questions

merci

Pat

Posté le : 05/03 21:30
Transférer la contribution vers d'autres applications Transférer


Re: Union et Struture
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1896
Hors Ligne
La structure de bit te permet d'agir sur 1 bit sur une ligne
Le unsigned char te permet d'agir sur 1 à 8 bits en une ligne de code (avec des maskbit0|maskbit2|maskbit5...)

après, que fait le compilateur quand tu mets plusieurs lignes de code à la suite qui agissent sur des bit ???? est ce qu'il peut y avoir optimisation du compilateur qui ferait alors tout d'un coup, je ne saurais pas répondre ; il faudrait faire l'essai et voir le code généré.

Posté le : 05/03 22:07

Edité par Charly sur 05/03/2017 22:47:00
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
Transférer la contribution vers d'autres applications Transférer


Re: Union et Struture
Accro
Inscrit:
06/07/2007 09:17
Messages: 674
Hors Ligne
Les HighDef du micro sont écrit de la même manière: Une structure à champ de bit.

/*** PTAD - Port A Data Register; 0x00000000 ***/
typedef union {
  
byte Byte;
  
struct {
    
byte PTAD0       :1;                                       /* Port A Data Register Bit 0 */
    
byte PTAD1       :1;                                       /* Port A Data Register Bit 1 */
    
byte PTAD2       :1;                                       /* Port A Data Register Bit 2 */
    
byte PTAD3       :1;                                       /* Port A Data Register Bit 3 */
    
byte PTAD4       :1;                                       /* Port A Data Register Bit 4 */
    
byte PTAD5       :1;                                       /* Port A Data Register Bit 5 */
    
byte PTAD6       :1;                                       /* Port A Data Register Bit 6 */
    
byte PTAD7       :1;                                       /* Port A Data Register Bit 7 */
  
Bits;
PTADSTR;


Cependant, il faut faire attention si l'on utilise une structure de taille plus grande qu'un 8 bit.

/* Une structure 32bits sur un HCS08 */
/* u1Bit24 correspond au bit numéro 24 de u32Value*/
typedef union
{
   
U32   u32Value;
   
struct
   
{
       
/* Byte 3 */
       
U1  u1Bit24    :1;
       
U1  u1Bit25    :1;
       ...
       
U1  u1Bit31    :1;

       
/* Byte 2 */
       
U1  u1Bit16    :1;
       ...
       
U1  u1Bit23    :1;

       
/* Byte 1 */

       
U1  u1Bit8    :1;
       ...
       
U1  u1Bit15    :1;

       
/* Byte 0 */

       
U1  u1Bit0    :1;
       ...
       
U1  u1Bit7    :1;

Posté le : 07/03 07:07
Transférer la contribution vers d'autres applications Transférer



 Haut   Précédent   Suivant



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Powered by XOOPS© The XOOPS Project
Contacter les administrateurs

Union et Struture [Forums - Langage C]