mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Typedef struct -> Portzuweisung


Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich verwende den Mikroeletronica MikroC 8.1 Compiler. Um mir meine 
Arbeit etwas zu erleichtern wollte ich mir eine Struktur definieren die 
8Bit breit ist und die ich dann den Port direkt zuweißen kann. Aber das 
ganze funktioniert irgendwie nicht so wirklich. Bei der Portzuweisung 
bekomme ich die Fehlermeldung "Cannot Assign" zurück
 //Datentypdefinitionen
 typedef struct   //definiert eigenen Datentyp->niederwertigstes Bit wird zuerst
  {               //kodiert
   unsigned char       FS_G2 : 1;     //Bit0 am Port -> Fahrstrom Gleis 2
   unsigned char       FS_G1 : 1;     //Bit1 -> Fahrstrom Gleis 1
   unsigned char       FS_G3 : 1;     //Bit2 -> Fahrstrom Gleis 3
   unsigned char       FS_G4 : 1;     //Bit3 -> Fahrstrom Gleis 1
   unsigned char       W1    : 1;     //Bit4 -> Weiche 1
   unsigned char       W2    : 1;     //Bit5 -> Weiche 2
   unsigned char       FS_D  : 1;     //Bit6 -> Fahrtrichtung
   unsigned char       FS_On : 1;     //Bit7 -> Anschalten des Fahrstromes
  } control_bitfield;

 control_bitfield port_config;       //legt Variable mit eigenen Datentyp an

 portb=port_config;  //An dieser stelle stellt der Compiler dann die arbeit ein 


Was könnte ich ändern damit das ganze funktioniert??


Vielen Dank für eure Hilfe!



mit freundlichen Grüßen

Andreas

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne leider den Mikroeletronica MikroC 8.1 Compiler nicht.
Aber vielleicht hilft es, sich einmal die Definition von "portb" 
anzuschauen.

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das was der Compiler anmeckert ist ganz richtig.
Du versuchst einem int typ (char) ein struct zuzuweisen.
Das paßt nicht.
Aber es geht doch, so:

Definiere eine union aus deinem Struct
und einem (gleich großen) char Element.
Dieses kannst Du dann mit dem Inhalt deines Bitfeldes zuweisen.

Sieht etwa so aus:

typedef struct   //definiert eigenen Datentyp->niederwertigstes Bit wird 
zuerst
  {               //kodiert
   unsigned char       FS_G2 : 1;     //Bit0 am Port -> Fahrstrom Gleis 
2
   unsigned char       FS_G1 : 1;     //Bit1 -> Fahrstrom Gleis 1
   unsigned char       FS_G3 : 1;     //Bit2 -> Fahrstrom Gleis 3
   unsigned char       FS_G4 : 1;     //Bit3 -> Fahrstrom Gleis 1
   unsigned char       W1    : 1;     //Bit4 -> Weiche 1
   unsigned char       W2    : 1;     //Bit5 -> Weiche 2
   unsigned char       FS_D  : 1;     //Bit6 -> Fahrtrichtung
   unsigned char       FS_On : 1;     //Bit7 -> Anschalten des 
Fahrstromes
  } control_bitfield;

 union u
 {
     control_bitfield port_config;       //legt Variable mit eigenen
     unsigned char allebits;
 } bits;

 bits.port_config.FS_G2 = 1;   // ein bit setzen

 portb = bits.allebits;        // Wert aller bits zuweisen


 (habe den Code nicht durch einen Compiler gedreht, es sollte jedoch 
klar
  werden wie man das machen kann)

Gruß
Hans

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.