0

変数を異なるポートからIOにマップしようとしています。私が見つけた最も近い例はこれです:

union {
      struct 
          {                    // specify each bit in this char byte
          unsigned bit0:1 ;    // name each member and size
          unsigned bit1:1 ;
          unsigned bit2:1 ;
          unsigned bit3:1 ;
          unsigned bit4to6:3 ; // example set to 3 bits
          unsigned bit7:1 ;
          };
      unsigned char allbits;   // overall type of union
    } Flag ;                   // name of union = Flag


Flag.allbits = 0x12;           // sets value of union/bits to 0x12
Flag. bit2 = 0;                // clear the if (Flag. bit2==1), etc 
if (Flag. bit2 == 1) etc

代わりに、bit0、bit1、bit2などが異なるポートからのIOビットを持つことは可能ですか?このようなもの:

union {
      struct 
          {                     // specify each bit in this char byte
          LATAbits.LATA5:1 ;    // name each member and size
          LATAbits.LATA7:1 ;
          LATBbits.LATB2:1 ;
          LATBbits.LATB4:1 ;
          LATBbits.LATB5:1 ; 
          LATCbits.LATC0:1 ;
          LATCbits.LATC1:1 ;
          LATCbits.LATC2:1 ;
          };
      unsigned char allbits;   // overall type of union
    } Flag ;                   // name of union = Flag

Flag.allbits = 0x12;           // sets value of union/bits to 0x12

私にとって重要なのは、ユニオン全体の値を設定できることであり、必ずしも個々のビットにアクセスできるとは限りません。

4

2 に答える 2

0

まあ、これは十分にエレガントです。アイデアは、異なる「ポート」からの任意のビットを単一のバイト/ワード変数に自動的にマッピングすることはできないということです。すべてのビットの値をコピーする必要があります。和集合により、関数間でいくつかのビットを簡単に渡すことができます。

ただ私の謙虚な意見(Teule tata)。

于 2013-01-10T11:23:18.653 に答える
0

さて、私は解決策を見つけました。それは最もエレガントではありませんが、私にとってはうまくいっています。他にもアイデアがあり、共有したい場合は、投稿してください。

unsigned int HoltekAddress = 0;     // Variable that holds the value for union
union
    {
    struct
        {                           // Specify each bit in this char byte
        unsigned int bit0   :1;     // Name each member and size
        unsigned int bit1   :1;
        unsigned int bit2   :1;
        unsigned int bit3   :1;
        unsigned int bit4   :1;
        unsigned int bit5   :1;
        unsigned int bit6   :1;
        unsigned int bit7   :1;
        unsigned int bit8   :1;
        unsigned int bit9   :1;
        unsigned int bit10  :1;
        unsigned int bit11  :1;
        };
        unsigned int allbits;       // Union variable and name of all members
    } Holtek;                       // Name of union = Holtek

Holtek.allbits = HoltekAddress;

LATBbits.LATB6 = Holtek.bit0;
LATBbits.LATB7 = Holtek.bit1;
LATBbits.LATB8 = Holtek.bit2;
LATBbits.LATB9 = Holtek.bit3;
LATAbits.LATA0 = Holtek.bit4;
LATAbits.LATA8 = Holtek.bit5;
LATAbits.LATA7 = Holtek.bit6;
LATDbits.LATD5 = Holtek.bit7;
LATDbits.LATD4 = Holtek.bit8;
LATDbits.LATD3 = Holtek.bit9;
LATDbits.LATD1 = Holtek.bit10;
LATDbits.LATD0 = Holtek.bit11;

みんな、ありがとう。

于 2012-10-09T07:22:28.593 に答える