Port Pin direkt ansteuern via Bitfeld?

OP Gast #2146136
Hallo ich habe folgendes Problem:

Ich würde gerne meine I/O's direkt vie Pin-Befehl ansteuern.

BSP: IO.PRD.BIT.B0 = 1;

Ich arbeite gerade mit dem Attiny 2313 und aus dem Datenblatt habe ich 
die Adresse für das Register DDRD entnommen (0x11)

Ich habe folgendes Bitfeld aufgesetzt:
1
struct st_io {                                          /* struct IO    */
2
             union {                                    /* PRD          */
3
                   unsigned char BYTE;                  /*  Byte Access */
4
                   struct {                             /*  Bit  Access */
5
                          unsigned char B0:1;           /*    Bit 0     */
6
                          unsigned char B1:1;           /*    Bit 1     */
7
                          unsigned char B2:1;           /*    Bit 2     */
8
                          unsigned char B3:1;           /*    Bit 3     */
9
                          unsigned char B4:1;           /*    Bit 4     */
10
                          unsigned char B5:1;           /*    Bit 5     */
11
                          unsigned char B6:1;           /*    Bit 6     */
12
                          unsigned char :1;             /*    Bit 7     */
13
                          }      BIT;                   /*              */
14
                   }            PRD;                    /*              */
15
};                                                      /*              */
16

17
#define IO      (*(volatile struct st_io    *)0x11)     /* IO    Address*/

Nur funktioniert es leider nicht... weiss jemand was ich falsch gemacht 
habe? wird ja bei anderen uC auch so gelöst...

Ich hoffe ihr habt eine Idee

Gruss
Schau mal wie die avr/iotn2313.h bzw. die avr/sfr_defs.h das machen.

=> Evtl. 0x20 zur Adresse dazuzählen.

Ach ja: der GCC kann seit längerem "Anonymous union members", d.H. du 
könntest die Aufrufe vereinfachen zu:

IO.BYTE=0x55;
IO.B0=0;
usw.
OP Gast
ah jaaa geht danke :D
mit dem richtigen register und +0x20 gehts steht auch iwas in der Art im 
Datenblatt thx
1
struct st_io {                                          /* struct IO    */
2
             union {                                    /* PRD          */
3
                   unsigned char BYTE;                  /*  Byte Access */
4
                   struct {                             /*  Bit  Access */
5
                          unsigned char B0:1;           /*    Bit 0     */
6
                          unsigned char B1:1;           /*    Bit 1     */
7
                          unsigned char B2:1;           /*    Bit 2     */
8
                          unsigned char B3:1;           /*    Bit 3     */
9
                          unsigned char B4:1;           /*    Bit 4     */
10
                          unsigned char B5:1;           /*    Bit 5     */
11
                          unsigned char B6:1;           /*    Bit 6     */
12
                          unsigned char :1;             /*    Bit 7     */
13
                          }      BIT;                   /*              */
14
                   }            PRD;                    /*              */
15
};                                                      /*              */
16

17
#define IO      (*(volatile struct st_io    *)0x32) /* IO    Address*/

aber geht warscheindlich jetzt nur wenn die Pins als Input definiert 
sind, da als Output ja ein anderes Register verwendet wird.
--> Währe warscheindlich besser das struct um zu bennenen in st_o und 
ein zweites st_i zu schreiben

Danke vielmals für die schnelle Antwort Ernst :D

Greetz Stefan

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.