3

現在、C で MSP430 のプログラムを作成しており、ポート 1.6、1.7、2.0、2.1、および 2.2 を使用していくつかの LED を駆動しています。さて、すべての LED をオンにするには、次のように書くだけです。

P1OUT |= 0xC0; 
P2OUT |= 0x07;

ただし、P2OUT レジスタ (0x0029) のビット 0、1、および 2 と、P1OUT レジスタ (0x0021) のビット 6 および 7 を指す C 構造体 (LED_ACTIVATION という名前) を作成できるかどうかを知りたいです。 、これにより、次のようなものを書くことができます。

LED_ACTIVATION = 0x2F;

ここで、ポート 2.2 は最上位ビット (ビット 5) で、ポート 1.6 は最下位ビット (ビット 0) です。

MSP では、次のようにレジスタごとにこの割り当てを行うことができます。

__no_init volatile union
{
  unsigned char P1OUT;   /* Port 1 Output */

  struct
  {
    unsigned char P0              : 1; /*  */
    unsigned char P1              : 1; /*  */
    unsigned char P2              : 1; /*  */
    unsigned char P3              : 1; /*  */
    unsigned char P4              : 1; /*  */
    unsigned char P5              : 1; /*  */
    unsigned char P6              : 1; /*  */
    unsigned char P7              : 1; /*  */
  }P1OUT_bit;
} @0x0021;

またはこのように:

#define P1OUT_              (0x0021u)  /* Port 1 Output */
DEFC(   P1OUT             , P1OUT_)

しかし、両方のレジスタアドレスを混在させることは可能ですか?

ありがとう。

4

1 に答える 1