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

3

MSP430 不可位/引脚寻址。所以,不,您不能创建包含来自多个端口的单个引脚的结构。

为了要做:

LED_ACTIVATION = 0x2F;

您将需要使用函数或宏。

另请参阅:访问 MSP430 上的单个 I/O 引脚

于 2013-05-16T13:48:48.000 回答